题目描述
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设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;
}
}
}
领取专属 10元无门槛券
私享最新 技术干货