题意:
给出一些字符串
其中出现频率最多的字符 c 对应26个字母的 'E'
问出现频率最多的字符 c 离'E'的距离 和 让我们把字符串翻译过来..
如果出现频率最大的字符有两个..则输出 "NOT POSSIBLE"
思路:
用一个数组来记录每个单词出现次数
找最多的那个..
对我来说 主要是翻译的过程 有点困难..我被绕晕了..囧~~
Tips:
※ 实现循环的过程用 %
※ 翻译过程用 ((arr[i]-'A')-tmp+26)%26+'A'
Code:
View Code
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 #define clr(x) memset(x, 0, sizeof(x)) 7 8 struct Ch 9 {10 char c;11 int num;12 }c[30];13 14 int main()15 {16 int i, j, k;17 char arr[1010], cc;18 int mm[30], d, T;19 bool flag;20 scanf("%d", &T);21 getchar();22 while(T--)23 {24 25 gets(arr);26 clr(mm);27 flag = true;28 29 int len = strlen(arr);30 for(i = 0; i < len; ++i)31 if(arr[i] != ' ') mm[arr[i]-'A']++;32 33 int min = -1;34 for(i = 0; i < 30; ++i){35 if(mm[i] > min){36 min = mm[i];37 cc = i+'A';38 }39 }40 41 for(i = 0; i < 30; ++i)42 if(i+'A' != cc && mm[i] == min) flag = false;43 44 if(!flag) puts("NOT POSSIBLE");45 else {46 printf("%d ", int(cc-'E'+26)%26);47 int tmp = int((cc-'E'+26)%26);48 for(i = 0; i < len; ++i)49 printf("%c", arr[i]==' '?arr[i]:((arr[i]-'A')-tmp+26)%26+'A');50 puts("");51 }52 }53 return 0;54 }