前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[优秀题解]题目1277[Lucky Word]

[优秀题解]题目1277[Lucky Word]

作者头像
编程范 源代码公司
发布2018-04-18 11:36:08
7160
发布2018-04-18 11:36:08
举报
文章被收录于专栏:C语言及其他语言

题目描述

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设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 0

题解正文

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

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

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

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

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

#include<iostream>

#include<cstring>

#include<algorithm>

#include<cmath>

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<=sqrt(x)&&x%j!=0) j++; if(x%j==0) return 0; else return 1;

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

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

for(int i=1;i<=len;i++) if(c[b[i]]==0)

{ for(int j=i;j<=len;j++) if(b[i]==b[j])

sum[i]++; //记录

c[b[i]]=1;

k++;

}

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

if(ps(sum[1]-sum[k])) cout<<"Lucky Word"<<endl<<sum[1]-sum[k]; else

cout<<"No Answer"<<endl<<"0"; //输出

return 0;

}

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

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

#include<cmath>

#include<cstdio>

#include<string>

#include<cstring>

#include<iostream>

#include<algorithm>

using namespace std;

int sum[10001];

char word[10001];

int vis[10001];

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

if(n<2) return false; for(int i=2;i*i<=n;i++){ if(n%i==0) return false;

} return true;

}

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

sort(sum,sum+len); int i,j,ans; for(i=0;i<len;i++){ if(sum[i]==0) continue; else{

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<len;i++){ if(vis[i]==1) continue; else if(vis[i]==0){ int j; for(j=i;j<len;j++){ if(word[j]==word[i]){

sum[i]++;

vis[j]=1;

}

}

vis[i]=1;

}

}

findout(sum,len); return 0;

}

3.较长一些的代码

#include<stdio.h>

#include<string.h>

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

{

int i;

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

for(i=2;i*i<=x;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<n;i++)

{

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

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

for(i=1;i<=25;i++) {

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

if(b[i]!=0&&b[i]<min)min=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<cstdio>

#include<iostream>

#include<cstring>

#include<cmath>

#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<=Length+1;i++) //i一定从0开始 字符串从0开始读;#define Ha for(i=1;i<=149;i++)//一些奇怪的define 宏定义一些自己喜欢的字 ;char String[105];int i,Length,Numbers[150],Maxn=0,Minn=100;bool PriNum(int);//判断素数 讲真可以在100以内搜就行了 ;Coding;int main(){

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

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

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){

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<=sqrt(GLGJSSYQYHFBQZ);i++){ if (GLGJSSYQYHFBQZ%i==0){

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

}

}

}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档