洛谷-笨小猴-NOIP2008提高组复赛
题目描述 Description
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
输入输出格式 Input/output
输入格式:
输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
输出格式:
输出文件word.out共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
输出格式:
输出文件word.out共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
输入输出样例 Sample input/output
样例测试点#1
输入样例:
[input1]
error
[input2]
olympic
输出样例:
[output1]
Lucky Word
2
[output2]
No Answer
0
说明 description
【输入输出样例1解释】
单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。
【输入输出样例2解释】
单词olympic中出现最多的字母i出现了1次,出现次数最少的字母出现了1次,1-1=0,0不是质数。
单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。
【输入输出样例2解释】
单词olympic中出现最多的字母i出现了1次,出现次数最少的字母出现了1次,1-1=0,0不是质数。
思路:这题十分简单,输入到一个字符串里,统计每个字母出现的次数,排序,再用最大的和最小的相减传入判断质数函数就得了
返回的如果是质数就输出(注意:要特别判断0和1的情况)
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 int fun(const void *a,const void *b)//大到小排序 6 { 7 return *(int*)b-*(int*)a; 8 } 9 int prime(int x) //是合数返回0,不是返回1 10 { 11 int i,l; 12 if(x==0||x==1) return 0; 13 else 14 { 15 l=sqrt(x); 16 for(i=2;i<=l;i++) 17 if(x%i==0) return 0; 18 return 1; 19 } 20 } 21 int main() 22 { 23 char a[999999]; 24 int i,j=0;//循环 25 int b[60];//存储每个字母出现的次数 26 int c[27];//备份 27 int maxn,minn;//最大最小 28 for(i=0;i<26;i++) 29 { 30 b[i]=0;//初始化、清零 31 } 32 //freopen("word.in","r",stdin); 33 //freopen("word.out","w",stdout); 34 gets(a); 35 for(i=0;i<strlen(a);i++)//统计每个字母出现的次数 36 { 37 b[a[i]-97]++; 38 } 39 for(i=0;i<26;i++) 40 { 41 if(b[i]!=0)//不是0,存入c数组 42 { 43 c[j]=b[i]; 44 j++; 45 } 46 } 47 qsort(c,j,sizeof(int),fun); 48 j--; 49 maxn=c[0]; 50 minn=c[j]; 51 if(prime(maxn-minn)==1) printf("Lucky Word\n%d\n",maxn-minn); 52 else if(prime(maxn-minn)==0)printf("No Answer\n%d\n",0); 53 return 0; 54 }
我不怕千万人阻挡,只怕自己投降…