题解 P1125 【笨小猴】
这道题是我在洛谷上的第100道橙题,就发片题解纪念一下。
代码行数:26行(对我来说几乎没有压行);时间:3ms(还挺快)
不要问我为什么都要期中考试了还发题解
思路
这道题其实根本没有什么坑点和难点,统计一下再算一遍就好了。
不过有一些能让代码更快更简单行数更少的细节:
1.单词长度只有最大只有怪怪的),
const int prime[25]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
这里
2.不用背
sum[s[i]-'a']++;
这里
3.不用定义记录字母有没有在单词中出现过的数组,因为这等价于
4.输出时只要发现满足直接输出并返回,不用
代码
相信没有多少人喜欢看上面的一通分析吧,那么,你们喜欢的代码来了——
#include<cstdio>
#include<cstring>//strlen函数
using namespace std;
char s[110];
const int prime[25]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};//打表
int sum[26];//记录和
int main(){
int maxn=0,minn=110;//最大值和最小值,注意初始化
scanf("%s",s);//用scanf读入字符数组时,注意不用加&
int len=strlen(s);//求字符串长度的函数
for(int i=0;i<len;i++){//遍历字符串
sum[s[i]-'a']++;//见上
}
for(int i=0;i<26;i++){//遍历26个字母
if(sum[i]>maxn) maxn=sum[i];//比较maxn
if(sum[i]>0&&sum[i]<minn) minn=sum[i];//比较minn,只比较出现过的字母
}
for(int i=0;i<25;i++){//遍历25个质数
if(maxn-minn==prime[i]){//满足条件了
printf("Lucky Word\n%d",maxn-minn);//输出,注意格式
return 0;//返回
}
}
printf("No Answer\n0");//不满足的情况,注意输出0
return 0;//华丽结束
}
在将要期中考试的时候写一篇题解也不容易,别忘了点个赞!