笨小熊

来源:互联网 发布:软件概念模型图 编辑:程序博客网 时间:2024/04/27 18:06

笨小熊

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

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

输入
第一行数据N(0<N<100)表示测试数据组数。
每组测试数据输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
输出
每组测试数据输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0
样例输入
2errorolympic
样例输出
Lucky Word2No Answer0

1.分析:主要是在判断字母出现次数最大值,最小值时出现问题。开始初始化数组为0,导致不好判断最小值,之后用find()去除没有出现过的单词,虽然防止了最小值一直为零的情况,但是当字符串为“aaa”等值时,最小值会与最大值相等,所以,我之后用排序来判断字符串是否为单值,若为单值,最小值赋值为0.即可解决问题。

2.代码:

 #include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int f(string a){    int al[30],maxn=-1,minn=110;    memset(al,0,sizeof(al));    for(int i=0;i<a.length();i++)        al[a[i]-'a']++;    for(int i=0;i<30;i++){        if(a.find(i+'a')==string::npos) continue;        if(al[i]>maxn) maxn=al[i];        if(al[i]<minn) minn=al[i];    }    sort(a.begin(),a.end());    if(a[0]==a[a.length()-1]) minn=0;    return maxn-minn;}bool isprime(int x){    if(x==0||x==1) return false;    int k=floor(sqrt(x)+0.5);    for(int i=2;i<=k;i++)        if(x%i==0) return false;    return true;}int main(){    int n;    cin>>n;    while(n--){        string a;        cin>>a;        int ans=f(a);        if(isprime(ans)) printf("Lucky Word\n%d\n",ans);        else printf("No Answer\n0\n");    }    return 0;}        



0 0
原创粉丝点击