首页 > 代码库 > NYOJ 62 笨小熊

NYOJ 62 笨小熊

笨小熊

时间限制:2000 ms  |  内存限制:65535 KB
 
描述

笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 
这种方法的具体描述如下:假设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
/*题解:
题意大概是:给一个字符串,判断出现最多的字符数-出现最少的字符数是否为质数(即素数),若是那么输出“Lucky Word”和该质数,否则输出“No Answer”和“0”。
题目的关键在于求出现最多的字符个数和最少的字符个数。 
*/
 1 #include<cstdio>  
 2 #include<cstring>  
 3 #include<algorithm>  
 4 using namespace std;  
 5 int is_prime(int x)//素数判断   
 6 {  
 7     if(x<2) return 0;  
 8     for(int i=2; i*i<=x; i++)  
 9         if(x%i==0)  
10         return 0;  
11     return 1;  
12 }  
13 int main()  
14 {  
15     int n,i,j,min,max,count,vis[110];  
16     char s[110];  
17     scanf("%d",&n);  
18     while(n--)  
19     {  
20         scanf("%s",s);  
21         min=110;max=0;//给min、max一个合适的值   
22         memset(vis,0,sizeof(vis));  
23         for(i=strlen(s)-1; i>=0; i--)  
24         {  
25             if(!vis[i])  
26             for(j=i,count=0; j>=0; j--)  
27             {  
28                 if(s[i]==s[j])  
29                 {  
30                     count++;  
31                     vis[j]=1;  
32                 }  
33             }     
34             if(count>max) max=count;  
35             if(count<min) min=count;  
36         }  
37         int t=max-min;  
38         if(is_prime(t))  
39             printf("Lucky Word\n%d\n",t);  
40         else  
41             printf("No Answer\n0\n");   
42     }  
43     return 0;  
44 }  

技术分享

NYOJ 62 笨小熊