读书人

[]一个简单的c++

发布时间: 2013-08-01 15:23:18 作者: rapoo

[求助]一个简单的c++
题目的大概意思就是输入几个颜色,算出出现次数最多的颜色、

#include <iostream>
using namespace std;
int main()
{
int N;
char a[1000][17]; //一个二维数组,用来盛放用户的输入。
int num=0; //color[]中有效值的数量
char color[20][17]; //盛放不同的颜色
int number[20]; //计数器
while(1)
{
cin>>N; //用户输入数据的数量,如果为0,则结束程序
if(N==0)
break;
else
{
for(int i=0;i<=N-1;i++)
{
scanf("%s",&a[i]);
for(int index=0;index<=num-1;index++) //对于用户的每次输入,都会
{ //与color[i]进行一次遍历比较,如果相同,计数器加1
if(strcmp(a[i],color[index])==0)
{
number[index]++;
break;
}
}

if(index==num)
{
num++; //如果color[]中没有相同的颜色,就在color[]中加
strcpy(color[index],a[i]);//这个颜色。
number[index]=1;
}

}
int max=0;
for(i=0;i<=num-1;i++) //遍历number数组,找到数量最大的一个,输出结果
{
if(number[i]>number[max])
max=i;
}
cout<<color[max]<<endl;
num=0;
}


}
return 0;
}
测试了几个简单的数据,结果都正确。

最后提交上去后显示超时,求各位大神看一下程序有没有问题,或者有没有更简单的方法。
[解决办法]
我觉得用时可能耗在每输入一种颜色,要和颜色表进行遍历比较上了。
可不可以建一个大数组,然后输入颜色的字符串通过某种形式转换成数字,用这个数字作为数组的索引。这样就省去了遍历颜色表这个步骤了。算是哈希表吧。
比如red,可以用(short)(('r'-'a')+('e'-'a')+('d'-'a'))来作为索引。

读书人网 >C++

热点推荐