Hnu 12505 字符串处理

题意:

给出一些字符串

其中出现频率最多的字符 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 }
原文地址:https://www.cnblogs.com/Griselda/p/2677215.html