列表

详情


BC145. [NOIP2008]笨小猴

描述

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入描述

只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。

输出描述

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

示例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;
}

上一题