要求:找出所给颜色中出现次数最多的颜色,多组数据测试,以0作为结束标志,每组数据必有一种最佳解决方案。
输入:一个整数N,后面N行每行输入一种颜色
输出:出现次数最多的颜色
解题思路:首先想到用字符数组来做,因为有多种颜色多行字符串,所以设置一个二维数组来操作,也方便定位输出。因为题目说明不会出现颜色次数相等的情况所以简单了许多。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,n,k=0,l,h=0,w[1000];
char d[1000][16];
while(cin>>n)
{ if(n==0)
break;
for(i=0;i<n;i++)
cin>>d[i];
for(i=0;i<n;i++)
for(l=i+1;l<n;l++)//检查后面的与当前位置字符串相等的个数
if(strcmp(d[i],d[l])==0)
{
k++;
w[i]=k;//每个位置的检查值存入一个数组
}
else
k=0;
for(i=1;i<n;i++)找出数组中检查值最大的位置
if(w[i]>w[i-1])
h=i;
cout<<d[h]<<endl;//输出相应的字符数组中的字符串
}
return 0;
}
反思:当时看这道题的第一想法是建立一个二维数组输入以后对二维数组进行排序然后判断字符串相同的个数会比较容易但是操作以后发现sort函数默认并不支持对二维数组进行排序,然后就转变了方法,在原始顺序下进行检查,每个存储单元都作为起始位置与后面进行比较然后保存值,最后找出最大的哪个值然后输出相应位置的字符串。
Sample Input
5
green
red
blue
red
red
3
pink
orange
pink
0
Sample Output
red
pink