nyoj 62-笨小熊(以对应数组中的ASC位 + 1)

62-笨小熊


内存限制:64MB 时间限制:2000ms Special Judge: No
accepted:15 submit:43

题目描述:

笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小熊就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入描述:

第一行数据N(0<N<100)表示测试数据组数。
每组测试数据输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。 

输出描述:

每组测试数据输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0

样例输入:

2
error
olympic

样例输出:

Lucky Word
2
No Answer
0

分析:
  1、将输入的字母插入,使其对应的ASC编码累加
  2、计数出最大数和最小数
  3、判断是否是质数

C/C++代码实现(AC):
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string>
 4 #include <cmath>
 5 
 6 using namespace std;
 7 
 8 bool isPrime (int n) {
 9     for (int i=2; i<=sqrt(n); ++i) {
10         if (n%i == 0) return false;
11     }
12     if (n<=1) return false;
13     return true;
14 }
15 
16 int main() {
17     int N;
18     cin >>N;
19     while (N --) {
20         string s;
21         int maxn=0, minn=0, a[130]={0};
22         cin >>s;
23 
24         for (int i=0; i<s.length(); ++i) {
25             a[int(s[i])] ++;
26         }
27 
28         sort (a+90, a+129, less<int>());
29         maxn = a[128];
30 
31         for (int i=128; ; --i) {
32             if (a[i-1] == 0) {
33                 minn = a[i];
34                 break;
35             }
36         }
37 
38         if (isPrime(maxn-minn)) cout <<"Lucky Word" <<endl <<maxn-minn <<endl;
39         else cout <<"No Answer" <<endl <<"0" <<endl;
40     }
41     return 0;
42 }
原文地址:https://www.cnblogs.com/GetcharZp/p/9109174.html