南阳oj 笨小熊

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
using namespace std;
bool prime(int n)
{
if(n==0 || n==1)
return false;
else if(n==2 || n==3)
return true;
else
{
for(int i=2;i<=sqrt(n);i++)
if(n%i==0)
return false;
return true;
}
}
int main ()
{
int t;
cin>>t;
while(t--)
{
char s[105];
int n[26]={0};
int book[26]={0};
int min=105,max=0;
int m ;
cin>>s;
m=strlen(s);
for(int i=0;i<m;i++)
{
int x=s[i]-'a';
n[x]++;
book[x]=1;
}
for(int i=0;i<=26;i++)
{
if(book[i]==1&&n[i]>max)
max=n[i];
if(book[i]==1&&min>n[i])
min=n[i];

}
if(prime(max-min))
{
cout<<"Lucky Word"<<endl;
cout<<max-min<<endl;
}
else
{
cout<<"No Answer"<<endl;
cout<<0<<endl;
}
}
return 0;
}

 

改了好几次才通过,呜呜呜都是泪啊

反思总结一下。

一开始是在对字符串数组的一次遍历中,记录了出现次数最多的字母和出现次数最少的字母,后来发现这样不行,因为后来出现的字母会将先前出现的字母覆盖掉

改成了遍历一,用数组记录下每一个字母出现的次数,再对这个整数数组进行遍历,找出其中的最大数和最小数,也不能通过,忽略了出现次数为零的字母情况

又加上了一个标记数组,用来标记字母是否在字符串中出现过

终于通过了····

posted @ 2018-07-24 20:55  换牙  阅读(70)  评论(0编辑  收藏  举报