信息学奥赛一本通1407:笨小猴

【考点】

本题考查对ascll的运用,在数组内求出最大值和最小值及判断质数。

【题目描述】

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn−minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

【输入】

只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。

【输出】

共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;

第二行是一个整数,如果输入单词是Lucky Word,输出maxn−minn的值,否则输出0。

【输入样例】

error

【输出样例】

Lucky Word
2

【提示】

样例输入:

样例 #2:

olympic

样例输出:

样例 #2:

No Answer
0

【解题思路】

首先输入一个字符串a[200],接着将每个字符按照ascll表上的顺序一一对应,将每个单词出现的次数按顺序依次加入新列表b[25]中。然后利用maxn和minn求出最大值和最小值,最后判断是否为质数输出。

(若不清楚ascll表具体内容,您可以在浏览器上输入关键词“ascll表”获取信息)

【题解代码】

#include <bits/stdc++.h>
using namespace std;
int f1(int b[27]){
	int maxn=-1,minn=20000;    //maxn保存最大值,minn保存最小值
	for (int i=0;i<=25;i++){
		if (b[i] > maxn) maxn = b[i];    //求出最大值
		if (b[i]<minn && b[i]!=0) minn = b[i];    //求出最小值
	}
	return maxn-minn;    //返回最大值和最小值之差
}
bool f2(int n){
	if (n<=1) return false;    //0和1不是质数,因此返回false
	for (int i=2;i*i<=n;i++){
		if (n%i==0) return false;    //判断是否为质数(若是,返回true;若不是,返回false)
	}return true;
}
int main(){
    char a[101];    //存储输入的字符串
	int t=1,b[27]={0},item;    //b[27]储存各字母出现次数,
	while (cin >> a[t]) t++;    //输入(输入完毕后输入Ctrl+Z再回车即可退出输入)
	for (int i=0;i<=t;i++) b[a[i]-97]++;    //按照ascll表顺序将每个字母出现次数保存入b数组
	if (f2(f1(b)) == true) cout << "Lucky Word" << endl << f1(b);    //输出
	else cout << "No Answer" << endl << 0;    //输出
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值