2159 - 笨小熊
笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小熊就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
Input
第一行数据N(0<N<100)表示测试数据组数。
每组测试数据输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
Output
每组测试数据输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0
Examples
Input
2 error olympic
Output
Lucky Word 2 No Answer 0
Solution C
#include<stdio.h> #include<string.h> #include<math.h> int judge(int a) { if(a==1||a==0) return 0; for(int i=2;i<=sqrt(a);i++) if(a%i==0) return 0; return 1; } main() { int num[26],i,max,min,n; char ch[128]; scanf("%d",&n); while(n--) { memset(num,0,sizeof(num)); scanf("%s",&ch); for(i=0;i<strlen(ch);i++) num[ch[i]-97]++; for(i=0,max=0,min=128;i<26;i++) { if(num[i]>max) max=num[i]; if(num[i]<min&&num[i]!=0) min=num[i]; } if(strlen(ch)==max) min=0; if(judge(max-min)) { puts("Lucky Word"); printf("%d\n",max-min); } else { puts("No Answer\n0"); } } }
Solution C++
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int isPrime(int a) { int i; if(a == 0 ||a ==1)return 0; if(a == 2)return 1; for(i = 2;i <= sqrt( a );i++) { if(a % i == 0)return 0; } return 1; } int letter[30]; char word[110]; int main() { int n ,i , maxn , minn ,temp; //freopen("1.in", "r", stdin); //freopen("1.out", "w", stdout); scanf("%d",&n); while(n--) { maxn = -1; minn = 101; memset(letter , 0 , sizeof(letter)); scanf("%s",word); for(i=0 ; i < strlen(word);i++) { letter[word[i]-'a']++; } for(i = 0 ; i <30 ; i++ ) { if(letter[i] >= maxn) maxn = letter[i]; if(letter[i] <= minn && letter[i]!=0) minn = letter[i]; } temp = isPrime(maxn - minn); if(temp == 1) { printf("Lucky Word\n"); printf("%d\n",maxn - minn); } else { printf("No Answer\n"); printf("0\n"); } } }