题目描述
no
样例
input:
error
output:
Lucky Word
2
算法1
(暴力枚举) $O(n^2)$
将26个字母存入b数组
a数组负责输入
c数组用于记录单词出现个数
d数组用于判断26个字母中哪些是这个单词出现的
prime函数用于判断一个数是否为质数
max用于求出现次数中的最大值
min用于求出现次数中的最小值
思路:
先将26字母存在数组中
再循环找输入的字符与26字母中的哪个匹配,匹配就把d置为1,说明该该单词包含这个字母,
就把c++,然后即可中止内层循环
接下来把再循环求最大值与最小值(注意:要判断d是否为真,即这个字母是否在单词中出现过)
最后判断max-min是否为质数,输出
注意:0和1均不是质数,要排除
代码1质数函数
int prime(int n){
for(int i=2;i<=sqrt(n);i++){//1 shifou zhishu
if(n%i==0)return 0;
}
if(n==1||n==0)return 0;
return 1;
}
------over 代码1
时间复杂度分析no
C++ 代码
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<fstream>
using namespace std;
int prime(int n){
for(int i=2;i<=sqrt(n);i++){//1 shifou zhishu
if(n%i==0)return 0;
}
if(n==1||n==0)return 0;
return 1;
}
int main(){
char a[101],b[27];
int c[27];
memset(c,0,sizeof(c));
bool d[27];
memset(d,0,sizeof(d));
cin>>a;
for(int i=0;i<26;i++){
// a[i]=i+1+96;
b[i]=i+1+96;
}
int lena=strlen(a);
for(int i=0;i<lena;i++){
for(int j=0;j<26;j++){
if(a[i]==b[j]){
c[j]++;
d[j]=1;
break;
}
}
}
int max=INT_MIN;
int min=INT_MAX;
for(int i=0;i<26;i++){
if(d[i]&&c[i]>max)max=c[i];
if(d[i]&&c[i]<min)min=c[i];
}
if(prime(max-min)){
cout<<"Lucky Word\n";
cout<<max-min<<endl;
}else{
cout<<"No Answer\n";
cout<<0<<endl;
}
return 0;
}
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度分析:no
C++ 代码