ACM程序设计书中题目--O(出现最多的颜色)

题目简述:输入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还是很开心的。再考虑一下更好更优的方法吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值