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

    xiaoxiao2021-03-25  203

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

    转载请注明原文地址: https://ju.6miu.com/read-837.html

    最新回复(0)