UVA 499

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=440

题意是求出字符串中出现次数最多的字母,并求出字母出现的次数,注意字母可能多个

#include<stdio.h>
#include<string.h> 
int jisuan(char *s,int *i)
{
 int k=0;
 char ss=*s;
 while((*s)==ss)
     {
      s++;
      k++;
      (*i)++;
     }
   (*i)--;  //回到主函数时有i++,所以这里要减一
 return k;
}//这个函数用于计算相同字母出现的次数
int main()
{
 int i,j,k,f[26],num;
 char str[1000],temp,ans[55];
 while(gets(str))
      {
       for(j=1;j<strlen(str);j++)
          for(i=0;i<strlen(str)-j;i++)
             if(str[i+1]<str[i])
                {
                 temp=str[i+1];
                 str[i+1]=str[i];
                 str[i]=temp;
                }        //先将字符串进行排序,便于计算 
       k=j=0;
       for(i=0;i<strlen(str);i++)
          {
           if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z')) 
               {
                num=jisuan(&str[i],&i);
                if(num>k)  
                      {
                       j=0;//这里是考虑到前面有相等,而后面又出现更多的的情况
                       ans[j]=str[i];
                       k=num;
                      }//有字母出现更多的,覆盖掉原来的
                else if(num==k)
                   {
                    j++;
                    ans[j]=str[i];//相等就排在后面
                   }
               }
          }
       ans[++j]='\0';//防止多于的字符输出
       printf("%s %d\n",ans,k);
      }
 return 0;
}

  

posted @ 2013-02-18 15:36  执着追求的IT小小鸟  阅读(103)  评论(0编辑  收藏  举报