题意:
给出一些字符串
其中出现频率最多的字符 c 对应26个字母的 'E'
问出现频率最多的字符 c 离'E'的距离 和 让我们把字符串翻译过来..
如果出现频率最大的字符有两个..则输出 "NOT POSSIBLE"
思路:
用一个数组来记录每个单词出现次数
找最多的那个..
对我来说 主要是翻译的过程 有点困难..我被绕晕了..囧~~
Tips:
※ 实现循环的过程用 %
※ 翻译过程用 ((arr[i]-'A')-tmp+26)%26+'A'
Code:
View Code
1 #include <stdio.h> 2 #include <cstring> 3 #include <algorithm> 4 #include <cmath> 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 }