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 }

你可能感兴趣的:(字符串处理)