62.笨小熊

描述

笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小熊就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入
第一行数据N(0<N<100)表示测试数据组数。
每组测试数据输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
输出
每组测试数据输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0
样例输入
2
error
olympic
样例输出
Lucky Word
2
No Answer
0
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<stdlib.h>
 5 
 6 int cmp(const void *a,const void *b) {
 7     return *(int *)b - *(int *)a; //从大到小排序,把a,b位置反过来就是从小到大
 8 }
 9 //假设是对int排序的话,如果是升序,那么就是如果a比b大返回一个正值,小则负值,相等返回0,其他的依次类推,
10 
11 int f(int n) {//判断素数
12     if(n<2) 
13         return 0;
14     for(int i = 2; i <= sqrt(n); ++i)
15         if(n % i == 0) 
16             return 0;
17         return 1;
18 }
19 
20 int main( ) {
21     int t, a[101], m;
22     char s[101];
23     scanf("%d", &t);
24     while(t--) {
25         scanf("%s", s);
26         m = strlen(s);
27         memset(a, 0, sizeof(a));
28         for(int i = 0; i != m; ++i) {
29             if(s[i] == '.') 
30                 continue;
31             ++a[i];
32             for(int j = i + 1; j != m; ++ j)
33                 if(s[j] == s[i]) {
34                     ++ a[i];
35                     s[j] = '.';
36                 }
37         }
38 
39         /*排序,降序
40         qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.其中第一个参数是参与排序的数组名;
41         第二个参数是参与排序的元素个数; 第三个数是单个元素的大小*/
42         qsort(a, 101, sizeof(int), cmp);
43         int k = 0;
44         while(k++ != 101)
45             if(!a[k]) 
46                 break;
47             -- k;
48             int x = a[0] - a[k];
49             if(f(x))
50                 printf("Lucky Word
%d
", x);
51             else
52                 printf("No Answer
0
");
53     }
54     return 0;
55 }
View Code
原文地址:https://www.cnblogs.com/tong69/p/5784247.html