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;
    }




  • 相关阅读:
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
  • 原文地址:https://www.cnblogs.com/NYNU-ACM/p/4236811.html
Copyright © 2011-2022 走看看