提供三种写法,按速度从快到慢来展示:
#include<iostream>
#include<string>
using namespace std;
string s;
char a[10001];
int sum[101]={0};
bool Judge(int x){
if(x==1||x==0)return 0;
for(int i=2;i<=x/i;i++){
if(x%i==0)return 0;
}
return 1;
}
int main(){
int n=0;
cin>>s;
for(int i=0;i<s.size();i++){
sum[s[i]]++;
}
for(int i=0;i<=n;i++){
for(int j=0;j<s.size();j++){
if(i==j)continue;
if(a[i]==s[j])sum[i]++;
}
}
int Max,Min;
Max=sum[s[0]];
Min=sum[s[0]];
for(int i=1;i<s.size();i++){
if(sum[s[i]]>Max)
Max=sum[s[i]];
if(sum[s[i]]<Min)
Min=sum[s[i]];
}
if(Judge(Max-Min)){
cout<<"Lucky Word"<<endl<<Max-Min;
}else{
cout<<"No Answer"<<endl<<0;
}
return 0;
}
代码量较大,下一种更少,但速度更慢:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string s;
int a[122+1] = {0};
bool Judge(int x) {
if (x == 1 || x == 0) return 0;
if (x == 2) return 1;
for (int i = 2; i < x; i++) {
if(x % i == 0) {
return 0;
}
}
return 1;
}
int main () {
cin >> s;
for (int i = 0; i < s.size(); i++) {
a[s[i]-'a']++;
}
sort(a, a + 26);
int min, max = a[25];
for (int i = 0; i <= 24; i++) {
if (a[i] != 0) {
min = a[i];
break;
}
}
if (Judge(max - min)) {
cout << "Lucky Word" << endl << max - min << endl;
} else {
cout << "No Answer" << endl << 0 << endl;
}
return 0;
}
下一种超少代码!!速度111ms(很慢吧?但省劲!):
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string s;
int a[122+1] = {0};
bool Judge(int x) {
if (x == 1 || x == 0) return 0;
if (x == 2) return 1;
for (int i = 2; i < x; i++)if(x % i == 0) return 0;
return 1;
}
int main () {
cin >> s;
for (int i = 0; i < s.size(); i++)a[s[i]-'a']++;
sort(a, a + 26);
unique(a, a + 26);
if(a[0] == 0) a[0] = a[1];
if (Judge(a[25] - a[0])) cout << "Lucky Word" << endl << a[25] - a[0] << endl;
else cout << "No Answer" << endl << 0 << endl;
return 0;
}
上次的单词拼写错误已改正