NYOJ 62 笨小熊
考察对字符串的操作。
将各个字符出现的次数保存到数组中,重复出现的赋值为 ‘.’, 再将数组降序排序,后面就简单了。
附ac代码:
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> int cmp(const void *a, const void *b){ return *(int *)b - *(int *)a; } int f(int n){ //判断素数 if(n < 2) return 0; for(int i = 2; i <= sqrt(n); ++i) if(n % i == 0) return 0; return 1; } int main(){ int t, ok, a[101]; char s[101]; scanf("%d", &t); while(t-- && scanf("%s", s)){ memset(a, 0, sizeof(a)); for(int i = 0; i != strlen(s); ++i){ if(s[i] == '.') continue; ++a[i]; for(int j = i + 1; j != strlen(s); ++j) if(s[j] == s[i]){ ++a[i]; s[j] = '.'; } } //排序,降序 qsort(a, 101, sizeof(int), cmp); int i = 0; while(i++ != 101) if(!a[i]) break; --i; int x = a[0] - a[i]; if(f(x)) printf("Lucky Word\n%d\n", x); else printf("No Answer\n0\n"); } return 0; }