记录杭电上刷过的题和思路 废话不多说,直接上代码 // creat by xiao #include<iostream> #include<string> using namespace std; int main() { int n,i,num[1000]={0},max,max_num; max=max_num=0; string colors[1000],color; while(cin>>n){ if(n==0)break; i=n; while(i--)//先全部存入,但只存n个数 { cin>>colors[i]; } for(int i=0;i<n;i++)//两次遍历,在最多的颜色对应的序号在num【】中赋值,当然,相同的颜色的值也相等 { for(int a=0;a<n;a++) { if(colors[i]==colors[a])num[i]++; } } for(int i=0;i<n;i++)//通过找出最大的值max来找出对应的序号max_num { if(num[i]>max){ max=num[i]; max_num = i; } } cout<<colors[max_num]<<endl;//输出颜色 for(int i=0;i<n;i++){//因为不是初始化,所以手动置零 num[i]=0; } max_num=max=0; } return 0; } 浅谈思路 鉴于数组不大,优先采用先完全录入的方式再通过两层遍历,找出最多颜色并记录其出现次数在记录了出现次数的数组中,通过两个变量来求出其对应的序号通过对应的序号输出颜色 待改进 写的有点繁琐,所以此题供参考,有不对或者改进之处也请指出内存上应该有很大的优化空间