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\n%d\n", x); 51 else 52 printf("No Answer\n0\n"); 53 } 54 return 0; 55 }