BC145. [NOIP2008]笨小猴
描述
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
输入描述
只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。输出描述
共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;示例1
输入:
error
输出:
Lucky Word 2
说明:
单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。示例2
输入:
Olympic
输出:
No Answer 0
说明:
单词olympic中出现每个字母都只出现一次,即出现次数最多的字母出现了1次,出现次数最少的字母出现了1次,1-1=0,0不是质数。C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2022-05-08
#include<stdio.h> int main() { int n = 0, m = 0, sum = 0, i = 0, j = 0, f = 1, max = 0, min = 100; char x[101] = "0"; scanf("%s", &x); n = strlen(x); for(i = 0; i < n; i++) { sum = 0; for(j = 0; j < n; j++) { if(x[i] == x[j]) { sum++; } } if(sum > max) { max = sum; } if(sum < min) { min = sum; } } m = max - min; for(i = 2; i < m; i++) { if(m % i == 0 ) { f = 0; } } if(f == 1 && m != 1 && m != 0) { printf("Lucky Word\n%d", m); } else { m = 0; printf("No Answer\n%d", m); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 304KB, 提交时间: 2022-04-29
#include <stdio.h> #include <string.h> #include <math.h> int IsPrime(int n) { int flag = 1; if (n < 2) flag = 0; else { for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) { flag = 0; break; } } } return flag; } int main() { int cnt[26] = { 0 }; char s[100] = " "; int index = 0, max = 0, min = 27; gets(s); for (int i = 0; i < strlen(s); i++) { index = s[i] - '0'-49; cnt[index]++; } for (int i = 0; i < 26; i++) { if (max < cnt[i]) max = cnt[i]; if (min > cnt[i] && cnt[i] != 0) min = cnt[i]; } int n = max - min; if (IsPrime(n)) { printf("Lucky Word\n"); printf("%d", n); } else { printf("No Answer\n"); printf("0"); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2022-07-21
#include<stdio.h> #include<string.h> int output(int a){ int count=0; for(int i=1;i<=a;i++){ if(a%i==0) count++; } if(count==2) return a; else return 0; } int main(){ int maxn=0,minn=100,count=0,sizen; char s[100]; scanf("%s",&s); sizen=strlen(s); for(int i=0;i<sizen;i++){ for(int j=0;j<sizen;j++){ if(s[i]==s[j]) count++; } if(count>maxn) maxn=count; if(count<minn) minn=count; count=0; } int val=output(maxn-minn); if(val!=0) printf("Lucky Word\n%d",val); else printf("No Answer\n0"); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2022-05-23
int main() { int arr[27] = { 0 }; char s[101] = { 0 }; gets(s); for (int i = 0; i < strlen(s); ++i) { ++arr[s[i] - 'a']; } int max = 0; int min = 100; for (int i = 0; i < 27; ++i) { if (arr[i]==0) { continue; } if (arr[i] > max) { max = arr[i]; } if (arr[i] < min ) { min = arr[i]; } } int p = max - min; if(p==0 || p==1) { printf("No Answer\n"); printf("0"); return 0; } for (int i = 2; i < p; ++i) { if (p % i == 0) { printf("No Answer\n"); printf("0"); return 0; } } printf("Lucky Word\n"); printf("%d\n",p); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 312KB, 提交时间: 2022-05-03
#include<stdio.h> #include<string.h> int is_primenumber(int n) { for (int i = 2;i <= n / i;i++) { if (n % i == 0) { return 0; } } return n; } int main() { char arr[101] = {'\0'}; scanf("%s", &arr); int len = strlen(arr); int maxn = 0, minn = 100; for (int i = 0;i < len;i++) { int count = 0; for (int j = 0;j < len;j++) { if (arr[i] == arr[j]) { count++; } } if (maxn < count) { maxn = count; } if (minn > count) { minn = count; } } int ret = is_primenumber(maxn - minn); if (ret && ret != 1) { printf("Lucky Word\n%d\n", ret); } else { printf("No Answer\n0"); } return 0; }