Pro.ID 1004

代码

@2018-01-04
以下是在线执行系统的结果,不代表复杂度
//解法1,执行慢,代码短。
#include <iostream>
#include <map>
#include <string>
using namespace std;
map<string, int> mp;
int main()
{
    int n;
    while (cin>>n, n!=0)
    {
        string s,p;
        int mx=0;
        for (int i=0;i<n;i++)
        {
            cin>>s;
            if (mp.find(s)==mp.end())
            {
                mp[s]=1;
                if (1>mx)
                {
                    mx=1;
                    p=s;
                }
            }
            else
            {
                mp[s]++;
                if (mp[s]>mx)
                {
                    mx=mp[s];
                    p=s;
                }
            }
        }
        cout << p << endl;
    }
}
//解法2,执行快,占内存多,代码长
#include<iostream>
#include<cstring>

using namespace std;

int main()
{
    int n,i,j,t;
    char str[20],color[10000][20];
    while(cin>>n&&n!=0)
    {
        int num[10000]={0},max=0;
        for( i=1;i<=n;i++)
        {
            cin>>str;
            for(j=1;j<=i;j++)
            {
                   if(strcmp(str,color[j])==0)
                    {
                        num[j]++;
                       if(num[j]>max)
                       {
                          max=num[j];
                          t=j;
                       }
                       break;
                    }
            }
            if(j>i)
                memcpy(color[j],str,sizeof(str));
        }
        cout<<color[t]<<endl;

    }
    return 0;
}
过程
以上全是抄的,自己尝试写过代码。思路上出现错误,然后卡壳了。
模拟的是人观测的方式,打眼一看,哪个颜色多少个球,然后输出,完工。
思路1,每次接收输入的时候,记录每种颜色球的个数。输入结束后,找到个数最多的,然后输出。
思路1的问题,如何在每次接收的时候统计个数,每接收一个就要遍历一次颜色是否重复么?相关的中间数据以什么样的形式存储呢。
思路2,先接收全部输入,然后再根据输入,进行个数统计。
思路2的问题,怎么遍历,还是要想办法存中间数据啊。感觉数组比vector要清晰啊。(实际上是我不熟悉vector的[])
#include<stdio.h>
#include<string>
#include<iostream>
#include <vector>
using namespace std;
struct ColorNum
{
    string Color;
    int n =0;
};

//问题:如何避免
int main()
{
    int Num = -1;
    string strColor;
    ColorNum strColorMost;
    vector<string> tmp;
    while (scanf("%d",&Num))
    {
        for (size_t i = 0; i < Num; i++)
        {
            cin >> strColor;
            tmp.push_back(strColor);
        }

    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章