题目简述:输入n行颜色,找出出现最多的颜色。
解题思路:
1、多组数据,用while进行输入。
2、数据数量已知,输入N即控制循环。
3、因为颜色是不同的字符串,所以首先考虑到用字符数组。又因为每组数据有多行输入,所以考虑到用结构体进行存储。
4、将数据输入进去。要寻找出现最多的,首先考虑到的思路是以第一个颜色为标准,用循环找接下来相同的颜色,每找到一个,数量增一。接下来以第二行的颜色为标准进行寻找,以此类推。但是这样出现的问题就是后面相同的颜色会重复作为标准。所以每以一个颜色为标准往后寻找的时候,将接下来的每一个与之相同的颜色的数组进行更改,使之开头变为0。这样接下来如果有开头是0的就可以continue,进行下一个颜色的寻找,即可将不同的颜色分离开来。
5、对于每一个颜色出现的次数,与最大值max(初值为0)进行比较,若次数>最大值,则进行赋值更改。建立一个新的string,来放置最大值对应的颜色。
6、将出现最多的颜色进行输出。然后在while输入循环的开始加一个判断n是否等于0,若等于0则跳出循环。
源代码:
#include <iostream>
using namespace std;
struct abc
{
char a[20];
}b[99999];
int main()
{
int n,i,max=0,j,c=1;
string d,e;
while (cin>>n)
{
if (n==0)
break;
for(i=0;i<n;i++)
cin>>b[i].a;
for (i=0;i<n;i++)
{
if (b[i].a[0]!='0')
{
d=b[i].a; //将b[i].a的值赋值给string d,后面会改掉该数组的值。
for (j=i+1;j<n;j++)
{
if (strcmp(b[j].a,b[i].a)==0) //比较数组的值是否相等。
{
b[j].a[0]='0'; //若相等,更改数组的值。
c++; //相等之后数值变量增一。
}
}
if (c>max)
{
max=c;
e=d; //若最大,则e=d,即更改数组之前最大的颜色的值。
}
c=1;
}
}
cout<<e<<endl;
max=0;
}
return 0;
}
解题感想:这个题相对来讲还是比较简单。不过虽然A了,但是感觉自己的思路还是有些麻烦,感觉还有更好的思路,更好的办法。唉!还是要加强学习。不过能A还是很开心的。再考虑一下更好更优的方法吧。