题解 - 【NOIP2008】笨小猴

题面简述

给你一个字符串,让你求出最多出现的字母出现次数和最少的字母的出现次数,并且得到他们的差,在判断是否是质数。

思路

首先,求众数(注意此时需要判断最小值是否为 \(0\) ) 然后在判断质数即可。

判定质数模板:

if (n < 2) {
    /* 不是质数 */
}
if (n == 2) {
    /* 是质数 */
}
for (int i = 3; i <= sqrt(n); ++i) {
    if (n % i == 0) {
        /* 不是质数 */
    }
}
/* 是质数 */

完整代码:

#include <bits/stdc++.h>
using namespace std;
int cnt[27];
int main() {
	std::string str;
	cin >> str;
	for (int i = 0; i < str.length(); ++i) {
		cnt[str[i] - 'a']++;
	}
	int max, min;
	max = -0x3f3f3f3f;
	min = 0x3f3f3f3f;
	for (int i = 0; i < 26; ++i) {
		if (cnt[i] > max) {
			max = cnt[i];
		}
		if (cnt[i] < min && cnt[i] >= 1) {
			min = cnt[i];
		}
	}
	int av = max - min;
	if (av < 2) {
		cout << "No Answer" << endl << '0' << endl;
		exit(0);
	}
    if (av == 2) {
        cout << "Lucky Word" << endl << av << endl;
        exit(0);
    }
	for (int i = 3; i <= sqrt(av); ++i) {
		if (av % i == 0) {
			cout << "No Answer" << endl << '0' << endl;
			exit(0);
		}
	}

	cout << "Lucky Word" << endl << av << endl;
}

猜你喜欢

转载自www.cnblogs.com/littlefrog/p/13197414.html