zoukankan      html  css  js  c++  java
  • HDU1004题解分析(字符串处理)

    这道题是从上个星期开始做的,看到题时觉得似曾相似,好像做过,理了一下思路敲完代码又不对,后来发现是数组用错了,之后又重新想了数组和比较用法,昨天改了一个多小时,后来样例输出全部正确,所有情况都考虑到了,还是WA,今天上午搜了一下代码,测了一下样例,发现当所有输入不一样时,输出一个即可,是我把这种情况考虑多了,我考虑的是当所有输入不一样时,不输出,改完之后立马就AC了,我只想说:我又想多了,,,,,,


    题意:给出N组字符串,判断哪一个字符串出现的次数最多,并输出该字符串。当N=0时,表示结束。


    输入:N代表有几个字符串,然后输入字符串


    输出:一组字符串中出现最多的一个


    思路:首先考虑用C++中的string数组来处理比较简单,然后定义一个string s[1000]来存放字符串和一个int型的a数组来记录每个字符串出现的次数,并把a[i]的值设为0。string  s[1000]中从i=0,j=0开始利用双重for循环来比较,if(s[i]==s[j])就让a[i]++,表示该字符串出现一次,然后依次判断每个字符串,当然如果该字符串出现多次,每一个不同位置的相同字符串出现次数一样多,不影响次数的判断。然后判断a[i中]哪个最大,也就表示s数组中哪个字符串出现的次数最多,把i赋值给k,输出s[k],程序结束。


    特殊情况考虑:当所有字符串只出现一次,也就是max=1时,应该怎么办?  答案是:输出其中一个,我的程序中是输出了第一个。(刚开始WA就是错在这)


    代码解释:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
    string s[1000];                //定义字符串数组和整型数组
    int a[1000];
    int n;
    while(cin>>n)                  //输入n表示有n个字符串
    {
    if(n==0)                   //当n=0时,表示程序结束
    return 0;
    for(int i=0;i<n;i++)      //输入n个字符串,并把a[i]设为0
    {
    cin>>s[i];
    a[i]=0;
    }
    for(i=0;i<n;i++)          //双重for循环判断字符串出现次数,并用a[i]来记录
    {
    for(int j=0;j<n;j++)
    {
    if(s[i]==s[j])
    a[i]++;
    }
    }
    int max=0, k;
    for(i=0;i<n;i++)         //设最大值max=0,判断a[i]的最大值即出现最多次,把最大值的下标i赋值给k
    {
    if(max<a[i])
    {
    max=a[i];
    k=i;


    }
    }                        //本来加了一个if(max==1)的判断 即当所有的字符串只出现一次  return 0,结果是错的
    cout<<s[k]<<endl;
    }


    return 0;
    }

    说了这么多,不知道大家理解木有,这道题其实是道水题,只不过对于我来说可能要多考虑一些时间,水平有限,大家将就着看吧

    贴一个比较好的代码,容易理解,以作参考

    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    int main()
    {
    int n;
    while(cin>>n&&n)
    {
    string str[1001];
    for(int i=1;i<=n;i++)
    {
    cin>>str[i];
    }
    sort(str+1, str+n+1);
    int sum[1001];
    for( i=1;i<=n;i++)
    sum[i]=1;
    int max=1;
    for( i=2;i<=n;i++)
    {
    if(str[i]==str[i-1])
    {
    sum[i]+=sum[i-1];
    }
    if(sum[i]>=sum[max])
    max=i;
    }
    cout<<str[max]<<endl;
    }
    return 0;
    }




  • 相关阅读:
    sublime-生成html1.0
    sublime代码片段
    单色半透明-兼容IE7
    IE
    身心被掏空
    屏幕适配的方法
    宫格布局实例(注意jquery的版本号要统一)
    宫格布局实例(注意jquery的版本号要统一)2
    有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。
    给出两个&#160;非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照&#160;逆序&#160;的方式存储的,并且它们的每个节点只能存储&#160;一位&#160;数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
  • 原文地址:https://www.cnblogs.com/NYNU-ACM/p/4236811.html
Copyright © 2011-2022 走看看