1 条题解
-
0
思路
三步走:
- 统计每个字母出现几次——开一个 26 格的数组
cnt[26],cnt[c - 'a']++; - 找出出现次数的最大值 maxn 和最小值 minn;
- 判断
maxn - minn是不是质数(注意 0 和 1 不是质数,2 是质数)。
代码
#include <stdio.h> #include <string.h> int isPrime(int n) { if (n < 2) return 0; for (int i = 2; i * i <= n; i++) if (n % i == 0) return 0; return 1; } int main() { char word[105]; int cnt[26] = {0}; scanf("%s", word); int len = strlen(word); for (int i = 0; i < len; i++) cnt[word[i] - 'a']++; int maxn = 0, minn = 105; for (int i = 0; i < 26; i++) { if (cnt[i] > maxn) maxn = cnt[i]; if (cnt[i] > 0 && cnt[i] < minn) minn = cnt[i]; // 只看出现过的字母 } int diff = maxn - minn; if (isPrime(diff)) printf("Lucky Word\n%d\n", diff); else printf("No Answer\n0\n"); return 0; }易错点
- 没出现过的字母次数是 0,不能算进 minn,否则 minn 永远是 0。
- 0 和 1 不是质数,判质数函数开头要拦住
n < 2的情况。
- 统计每个字母出现几次——开一个 26 格的数组
- 1
信息
- ID
- 6
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
吉公网安备22010402001496号