【优秀题解】题目1277【Lucky Word】

题目描述

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

输入

输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。

输出

输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。

样例输入

输入样例1

error

输入样例2

olympic

样例输出

输出样例1

Lucky Word

2

输出样例2

No Answer

题解正文

先将输入的char类型用转变为int类型(相信初学者也会)

其次进行暴力逐一进行比较,比较出一样的次数,当然在过程中要注意进行判重(建议设一个布尔变量,判断过一次该数后不在进行判断),将每次出现的次数存在另一个数组中(相信大佬们可以优化到恰当好处!!!)

接着对存放次数的数组进行排序,求出最大值与最小值(其实也完全不需要排序,相信更牛逼的大佬可以直接的结果!!!)

然后进行判断质数(一定要注意“1”不是质素。。。。可怜的我就死在这里很多次。。。。否则会得到60分,但怎么发现都不会发现问题)————不会判断质数的孩子们翻模板

最后就是输出了(入门级别的都会把?)

#include

#include

#include

#include

using namespace std;char a[101];int b[101],sum[101],k;bool c[101];int cmp(int x,int y) //比较{ if(x>y) return 1; else return 0;

}int ps(int x) //判断质数的模板{

if(x==1) return 0; //一定要注意1不为质数

if(x==2) return 1; int j=2; while(j

}int main(){ cin>>a; int len=strlen(a); for(int i=0;i

b[i+1]=a[i]; //转化

for(int i=1;i

{ for(int j=i;j

sum[i]++; //记录

c[b[i]]=1;

k++;

}

sort(sum+1,sum+len+1,cmp); //比较

if(ps(sum[1]-sum[k])) cout

cout

return 0;

}

2.我可以提供一个非常好理解的方法~~

这道题就是遍历字符串,寻找字符数量然后用数组存起来,排序后判素,然后输出就可以了

#include

#include

#include

#include

#include

#include

using namespace std;

int sum[10001];

char word[10001];

int vis[10001];

bool is_prime(int n){//判素神器

if(n

} return true;

}

void findout(int sum[],int len){

sort(sum,sum+len); int i,j,ans; for(i=0;i

ans=sum[len-1]-sum[i]; //prime(ans);//判断ans是不是质数

if(is_prime(ans)==true){ printf("Lucky Word\n"); printf("%d",ans);

} else{ printf("No Answer\n");

printf("0");

}

break;

}

}

}int main(){ memset(vis,0,sizeof(vis)); scanf("%s",word); int len=strlen(word); for(int i=0;i

sum[i]++;

vis[j]=1;

}

}

vis[i]=1;

}

}

findout(sum,len); return 0;

}

3.较长一些的代码

#include

#include

int b[27];int zs(int x)//判断质数

{

int i;

if(x==1||x==0)return 0;

for(i=2;i*i

if(x%i==0)return 0; return 1;

}

main()

{ char a[105]; int n,max=0,min=99999999,x,i;

gets(a);

n=strlen(a); for(i=0;i

{

b[a[i]-'a']++;

}//统计每个字母出现的个数

for(i=1;i

if(b[i]>max)max=b[i];

if(b[i]!=0&&b[i]

}//找出出现最多的次数和最小的次数

x=max-min;//求差 if(zs(x)==1)

{ printf("Lucky Word\n"); printf("%d\n",x);

} else

{ printf("No Answer\n"); printf("%d\n",0);

} return 0;

}

5.超长代码

#include

#include

#include

#include

#define Coding

using namespace std

#define Explode return

#define AddOneSecond

if#define ReduceOneSecond

else#define Read scanf#define Write printf#define For for(i=0;i

Read("%s",String); //读入字符串

Length=strlen(String); //strlen函数读取字符串长度 用头文件;

For //来一波循环 把字符串每个字符判断一轮;

{

AddOneSecond (String[i])

{

Numbers[int(String[i])]++; //嵌套数组,把字母出现的次数记录下来;

}

}

Ha

{

AddOneSecond(Numbers[i]>Maxn)

{

Maxn=Numbers[i]; //如果某个字母出现次数大于Maxn,更新Maxn,最终Maxn就等于出现最多次数的字母出现的次数;

}

AddOneSecond(Numbers[i]!=0&&Numbers[i]

Minn=Numbers[i]; //同上,增加了一些判断;

}

}

AddOneSecond(PriNum(Maxn-Minn)==true) //如果判断Maxn-Minn是素数 输出Lucky Word 输出该素数

{

Write("Lucky Word\n");

Write("%d",Maxn-Minn);

} ReduceOneSecond Write("No Answer\n0"); //换行

Explode 0; //哈哈爆0 #define 宏定义真的可以定义一些好玩的东西}bool PriNum(int GLGJSSYQYHFBQZ) //判断素数的函数 ,为了方便定义成bool形式;{

AddOneSecond (GLGJSSYQYHFBQZ==1||GLGJSSYQYHFBQZ==0){ //苟利国家生死以,岂因祸福避趋之;

Explode false;

}

ReduceOneSecond Explode true; for (i=2;i

Explode false; break; //有其它因数直接 return false,break跳出循环,return 0讲真不是很规范,不过程序结尾应该return 0;

}

}

}

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128A0GC6900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券