字符串的完美度

来源:互联网 发布:手机linux模拟器 编辑:程序博客网 时间:2024/04/30 13:35

我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。现在给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。函数头部Cint perfect(const char *s);C++int perfect(const string &s);javapublic static int perfect(String s);

/*
1.先统计字符串 并按照使用频率排列下来

2. 算出完美度

*/
#include <stdio.h>
#include <string.h>

int perfect(const char *s)
{
  int res = 0;
  int a[26] = {0};
  int tmp =0;
 
  for(int i = 0; i<strlen(s); i++)
  {
      
      switch(s[i]){
         case 'a':
         case 'A':a[0]=a[0]+1; break;
         
         case 'b':
         case 'B': a[1]=a[1]+1; break;
         
         case 'c':
         case 'C' :a[2]=a[2]+1; break;

         case 'd':
         case 'D' :a[3]=a[3]+1; break;
         
         case 'e':
         case 'E' :a[4]=a[4]+1; break;

         case 'f':
         case 'F' :a[5]=a[5]+1; break;
             
         case 'g':
         case 'G' :a[6]=a[6]+1; break;
         
         case 'h':
         case 'H' :a[7]=a[7]+1; break;
    
         case 'i':
         case 'I' :a[8]=a[8]+1; break;
             
         case 'j':
         case 'J' :a[9]=a[9]+1; break;

         case 'k':
         case 'K' :a[10]=a[10]+1; break;

          case 'l':
         case 'L' :a[11]=a[11]+1; break;

         case 'm':
         case 'M' :a[12]=a[12]+1; break;
                  
         case 'n':
         case 'N' :a[13]=a[13]+1; break;
                  
         case 'o':
         case 'O' :a[14]=a[14]+1; break;
         case 'p':
         case 'P' :a[15]=a[15]+1; break;
                           
         case 'q':
         case 'Q' :a[16]=a[16]+1; break;
         case 'r':
         case 'R' :a[17]=a[17]+1; break;
         case 's':
         case 'S' :a[18]=a[18]+1; break;
         case 't':
         case 'T' :a[19]=a[19]+1; break;
         case 'u':
         case 'U' :a[20]=a[20]+1; break;
         case 'v':
         case 'V' :a[21]=a[21]+1; break;
         case 'w':
         case 'W' :a[22]=a[22]+1; break;
         case 'x':
         case 'X' :a[23]=a[23]+1; break;
         case 'y':
         case 'Y' :a[24]=a[24]+1; break;
         case 'z':
         case 'Z' :a[25]=a[25]+1; break;

       default:
            printf("ERROR!\n");
            return 0;
      }
           
    }
  //sort
       
  for(int i =0 ; i<26; i++)
     for(int j = i+1; j< 26;j++)
       {
           if(a[i]>a[j])
           {
                 tmp = a[i];
                 a[i]=a[j];
                 a[j]=tmp;
       
            }
       }
   
  //a[0] ...a[25]  123456789
  for(int i = 26; i>0&&a[i-1]!=0;i--)
    {
       res = res +i*a[i-1];
     }
     //printf("RES %d\n",res);
     return res;
}
int main()
{
    
    printf("perfect %d\n",perfect("aaaabc"));
    
}

0 0
原创粉丝点击