首页 > 试题广场 >

[NOIP2008]笨小猴

[编程题][NOIP2008]笨小猴
  • 热度指数:11700 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解

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

这种方法的具体描述如下:假设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不是质数。  
#include <iostream>
#include <cmath>

// 判断是否为质数
bool isPrime(int num) {
    if (num < 2) return false;
    bool flag = true;
    for (int i = 2; i <= (int)std::sqrt(num); ++i) {
        if (num % i == 0) {
            flag = false;
            break;
        }
    }
    return flag;
}

int main() {
    int arr[24] = {0};
    char c;
    while (scanf("%c", &c) != EOF) ++arr[c - 'a'];
    int min = 100, max = 0;
    for (int i = 0; i < 24; ++i) {
        if (arr[i] == 0) continue;
        min = min < arr[i] ? min : arr[i];
        max = max > arr[i] ? max : arr[i];
    }
    if (isPrime(max - min)) printf("Lucky Word\n%d", max - min);
    else printf("No Answer\n0");
    return 0;
}

发表于 2022-03-30 21:51:43 回复(0)
我大一,这题看不懂是不是废了

发表于 2023-06-04 21:44:19 回复(3)
def find_num(num):
    if num<2:
        return False
    for i in range(2,num):
        if num%i==0:
            return False
    return True

word=input()
c_times=[word.count(x) for x in word]
max_=max(c_times)
min_=min(c_times)
if find_num(max_-min_):
    print("Lucky Word")
    print(max_-min_)
else:
    print("No Answer")
    print("0")

发表于 2022-09-02 19:15:24 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int i = 0;
    int count = 0;
    int b = 1;
    int max = 0;
    int min = 100;
    int flage = 0;
    int arr1[100] = { 0 };
    char arr[100] = { 0 };
    scanf("%s", &arr);
    while (arr[i])
    {
        count++;
        i++;
    }
        /*int a = 0;
        while(count)
        {
            b = 1;
            while (arr[a + b])
            {
                if (arr[a] == arr[a + b]&&arr[a]>96)
                {
                    arr[a + b] = count;
                }
                b++;
           }
            if (arr[a] > 96)
            {
                arr[a] = count;
            }
            a++;
            count--;
            }*/可省略
    for(int u = 0;u<i;u++)
    {
        arr1[u] = 1;
        for (int j = -1; j < i; j++)
        {
            if (arr[u] == arr[j + 1])
            {
                arr1[u]++;
            }
        }
    }
    int s = i;
    while (s>0)
    {
        if (max < arr1[s-1])
        {
            max = arr1[s-1];
        }
        s--;
    }
    while (i > 0)
    {
        if (min > arr1[i-1])
        {
            min = arr1[i-1];
        }
        i--;
    }
    int m = max - min;
    for (int v = 2; v <= m; v++)
    {
        if (m % v == 0)
        {
            flage = 1;
        }
    }
    if (flage)
    {
        printf("Lucky Word\n");
        printf("%d", m);
    }
    else
    {
        printf("No Answer\n");
        printf("0");
    }
    return 0;
}

编辑于 2023-12-23 15:27:21 回复(0)
坑:不是质数统一输出No Answer0
发表于 2023-06-04 19:20:46 回复(0)
#include <stdio.h>
#include<string.h>

int zhishu(int x)
{
     int i,j;
     if(x==0||x==1) return 0;
     for(i=2;i<x;i++)
     {
        if(x%i==0)
        {
            return 0;
        }
     }
     return 1;
}
int main() {
    char word[100]={0};
    int max=0;
    int min=100;
    scanf("%s",word);
    int i,j,x,y,count=1;
    for(i=0;i<strlen(word);i++)
    {
         for(j=0;j<strlen(word);j++)
         {
            if(i==j) continue;
            if(word[i]==word[j]) count++;

         }
         if(count>=max) max=count;
         if(count<=min) min=count;
         count=1;
    }
    x=max-min;
    if(zhishu(x)==1)
    {
        printf("Lucky Word\n");
        printf("%d",x);
    }
    else 
    {
          printf("No Answer\n");
          printf("%d",0);    
    }
    return 0;
}

发表于 2023-03-24 23:44:39 回复(0)
#include <stdio.h>
#include <string.h>
_Bool isPrime(int n);
int main() {
    char array[100];
    scanf("%s", array);
    int n = 0;
    int max = 0, min = 1000;
    int nums[1000] = { 0 };
    for (int i = 0; i < strlen(array); i++) {
        char a = array[i];
        nums[a]++;
    }
    for (int i = 65; i <= 122; i++) {
        if (nums[i] > max) {
            max = nums[i];
        }
        if (nums[i] < min && nums[i] != 0) {
            min = nums[i];
        }
        n = max - min;
    }
    if (isPrime(n) == 1) {
        printf("Lucky Word");
        printf("\n%d", n);
    } else {
        printf("No Answer");
        printf("\n0");
    }

    return 0;
}
_Bool isPrime(int n) {
    if (n <= 1) {
        return 0;
    } else {
        for (int i = 2; i < n; i++) {
            if (n % i == 0) {
                return 0;
            }
        }
    }
    return 1;
}

发表于 2022-09-23 11:41:30 回复(0)
#include<stdio.h>
char c[100];
int a[30];
int isprime(int x)
{
    if(x==2)
        return 1;
    if(x==1)
        return 0;
    int i;
    if(x%2==0)
        return 0;
    for(i=3;i<x;i=i+2)
    {
        if(x%i==0)
            return 0;
    }
    return 1;
}
int main()
{
    gets(c);
    for(int i=0;c[i]!='\0';i++)
    {
        a[c[i]-'a']++;
    }
    int max=0,min=100;
    for(int i=0;i<=29;i++)
    {
        if(a[i])
        {
            if(a[i]>max)
            max=a[i];
            if(a[i]<min)
                min=a[i];
        }
    }
    if(isprime(max-min)==1)
        printf("Lucky Word\n%d",max-min);
    else 
        printf("No Answer\n0");
    return 0;
}


发表于 2022-06-22 22:50:32 回复(0)
#include<stdio.h>

int main(void)
{
    int arr[26]={0},i,s,maxn=1,minn=100;
    char a;
    while(scanf("%c",&a)!=EOF)
    {
        arr[a-97]++;
    }//存入每个字母的出现次数
    for(i=0;i<26;i++){
        if(arr[i]>maxn){maxn=arr[i];}
        if(arr[i]>0 && arr[i]<minn){minn=arr[i];}
    }//找最大和最小出现次数,其中最小出现次数大于0
    s=maxn-minn;
    if(s<2){printf("No Answer\n0");return 0;}//大于2才可计算是不是质数
    for (i = 2; i < s; i++) {
        if (s % i == 0)
        {
            printf("No Answer\n0");
            return 0;
        }
    }
    printf("Lucky Word\n%d",s);
    return 0;
}
发表于 2022-03-17 14:04:29 回复(0)
#include <stdio.h>
#include <string.h>
int main()
{
    char b[20] = { 0 };

    scanf("%s", b);
    int n = strlen(b);

    int a[26] = { 0 };
    for (int i = 0; i < n; i++)
    {

        switch (b[i])
        {
        case 'a':
            a[0]++;
            break;
        case 'b':
            a[1]++;
            break;
        case 'c':
            a[2]++;
            break;
        case 'd':
            a[3]++;
            break;
        case 'e':
            a[4]++;
            break;
        case 'f':
            a[5]++;
            break;
        case 'g':
            a[6]++;
            break;
        case 'h':
            a[7]++;
            break;
        case 'i':
            a[8]++;
            break;
        case 'j':
            a[9]++;
            break;
        case 'k':
            a[10]++;
            break;
        case 'l':
            a[11]++;
            break;
        case 'm':
            a[12]++;
            break;
        case 'n':
            a[13]++;
            break;
        case 'o':
            a[14]++;
            break;
        case 'p':
            a[15]++;
            break;
        case 'q':
            a[16]++;
            break;
        case 'r':
            a[17]++;
            break;
        case 's':
            a[18]++;
            break;
        case 't':
            a[19]++;
            break;
        case 'u':
            a[20]++;
            break;
        case 'v':
            a[21]++;
        case 'w':
            a[22]++;
        case 'x':
            a[23]++; break;
        case 'y':
            a[24]++; break;
        case 'z':
            a[25]++; break;

        }
    }

    //冒泡排序, 求maxn, minn
    int maxn = 0, minn = 0;
    maxn = a[0];
    minn = 20;
    for (int i = 0; i < 26; i++)
    {
        if (maxn < a[i])
        {
            maxn = a[i];
        }

        if (minn > a[i]  && a[i] != 0)
        {
            minn = a[i];
        }

    }

    int result = maxn - minn;

    //判断是否为质数, 1bushi
    int pd = 0;
    for (int i = 2; i < result; i++)
    {
        if (result % i == 0)
        {
            pd++;
            break;
        }
    }

    if (result == 1 ||  result == 0)
        {
            pd++;
        }
   

    if (pd == 0 )
    {
        printf("Lucky Word\n");
        printf("%d\n", result);
    }
    else
    {
        printf("No Answer\n");
        printf("0\n");
    }



    return 0;
}
发表于 2024-05-19 21:10:25 回复(0)
#include <stdio.h>
#include <ctype.h>
#include <math.h>

int main() {
    char arr[50];
    scanf("%s",arr);
    int count=0;
    for (int i=0; i<100; i++) 
    {
        if (isupper(arr[i])) 
        {
            arr[i]=tolower(arr[i]);
        }
        if (arr[i]!='\0') 
        {
            count++;
        }
        else 
        {
            break;
        }
    }
    int max=0;
    int min=100;
    for (int i=0; i<count; i++) 
    {
        int ret=0;
        for (int j=0; j<count; j++) 
        {
            if (arr[i]==arr[j]) 
            {
                ret++;
            }
        }
        if (ret>max) 
            {
                max=ret;
            }
        if (min>ret) 
            {
                min=ret;
            }
    }
    int tmp=max-min;
    if (tmp==1 || tmp==0) 
    {
        printf("No Answer\n");
        printf("0");
        return 0;
    }
    if (tmp==2) 
    {
        printf("Lucky Word\n");
        printf("%d",tmp);
        return 0;
    }
    for (int i=2; i<tmp; i++) 
    {
        if (tmp%i==0) 
        {
            printf("No Answer\n");
            printf("0");
            return 0;
        }
    }
    printf("Lucky Word\n");
    printf("%d",tmp);
    return 0;
}

发表于 2024-04-27 15:05:33 回复(0)
#include <stdio.h>
#include <math.h>

int IsPrime(int x)
{
    if (x == 2) return 1;//2是素数
    if (x <= 1 || x % 2 == 0) return 0;//小于等于1的不是素数,2以外的所有偶数不是素数

    int i = 0;
    for (i = 3; i <= sqrt(x); i += 2)//只遍历奇数
    {
        if (x % i == 0) return 0;
    }
    return 1;
}

int main()
{
    char word[100] = { 0 };
    int arr[27] = { 0 };//用桶排序思想来记录字母出现次数
    char* p = word;
    int i = 0;
    int max = 0;
    int min = 0;

    scanf("%s", word);

    //遍历单词,进行计数
    for (i = 0; *(p + i) != '\0'; i++)
    {
        arr[*(p + i) - 97]++;
    }

    //为min、max寻找基准数
    for (i = 0; i < 27; i++)
    {
        if (arr[i] != 0)
        {
            max = min = arr[i];
            break;
        }
    }

    //遍历数组,寻找最大及最小次数出现次数
    for (i = 0; i < 27; i++)
    {
        max = max > arr[i] ? max : arr[i];

        //找最小数时必须添加判断条件,使min不得为0
        //不然min在结束时几乎必然为0
        if (arr[i] != 0 && min > arr[i])
        {
            min = arr[i];
        }
    }

    if (IsPrime(max - min))
    {
        printf("Lucky Word\n");
        printf("%d\n", max - min);
    }
    else
    {
        printf("No Answer\n");
        printf("0\n");
    }

    p = NULL;

    return 0;
}

发表于 2024-03-28 13:14:44 回复(0)
#include <stdio.h>
#include <string.h>

int judge(int a) {
    int tag = 0;
    if(a == 0 || a == 1){
        return 0;
    }
    for(int x=1; x<=a; x++){
        if((a % x) == 0){
            tag++;
        }
    }
    if(tag<=2){
        return 1;
    }
    return 0;
}

int main() {
    char word[100]={0};
    scanf("%s", word);
    int maxn=0, minn=strlen(word), tag=0;
    for(int i=0; i<strlen(word); i++){
        tag = 0;
        for(int j=0; j<strlen(word); j++){
            if(word[i]==word[j] && i!=j){
                tag++;
            }
        }
        maxn = tag>maxn?tag:maxn;
        minn = tag<minn?tag:minn;
    }
    if(judge(maxn-minn) == 1){
        printf("Lucky Word\n%d", maxn-minn);
    }
    if(judge(maxn-minn) == 0){
        printf("No Answer\n0");
    }
    return 0;
}

编辑于 2024-02-11 18:00:36 回复(0)
字符串统计各字符的次数
s = input()
a = [s.count(i) for i in s]
n = max(a)-min(a)
flag=0
if n<=1:
    flag=1
for i in range(2,n):
    if n%i == 0:
        flag=1
        break
if flag==1:
    print("No Answer")
    print("0")
else:
    print("Lucky Word")
    print(n)


发表于 2024-02-11 14:28:48 回复(0)
package main

import (
    "fmt"
)

func isPrime(n int) bool {
    if n < 2 {
        return false
    }
    for i := 2; i <= n/i; i++ {
        if n%i == 0 {
            return false
        }
    }
    return true
}

func main() {
    var s string
    fmt.Scan(&s)
    mp := make(map[rune]int, 24)
    for _, v := range s {
        mp[v]++
    }
    minn, maxn := 99, 0
    for _, v := range mp {
        if v < minn {
            minn = v
        }
        if v > maxn {
            maxn = v
        }
    }
    if !isPrime(maxn-minn) {
        fmt.Printf("%s\n%d", "No Answer", 0)
    } else {
        fmt.Printf("%s\n%d","Lucky Word",maxn-minn)
    }
}
编辑于 2023-12-22 16:33:40 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String a = sc.next();
        char[] b=a.toCharArray();
        int max=0;
        int min=b.length;
        boolean s=true;
        for(int i=0;i<b.length;i++) {
            int num=0;
            for (int j = 0; j < b.length; j++) {
                if(b[i]==b[j]) {
                    num++;
                }
            }
            if(num>max) {
                max=num;
            }
            if(min>num) {
                min=num;
            }
        }
        int ss=max-min;
        if(ss<=1) {
            s=false;
        }
        for (int i = 2; i <= Math.sqrt(ss); i++) {
            if(ss%i == 0 ) {
                s=false;
            }
        }
        if(s==true||ss==2) {
            System.out.println("Lucky Word");
            System.out.println(ss);
        }else {
            System.out.println("No Answer");
            System.out.println(0);
        }
    }
}
发表于 2023-11-19 21:16:27 回复(0)
#include <stdio.h>
#include<string.h>
int main()
{
    char arr[10] = {0};
    gets(arr);
    int sum = 0,maxn = 0,minn = 10;
    int i,sor;
    for(i=0;i<strlen(arr);i++)
    {
        sum = 0;
        int j;
        for(j=0;j<strlen(arr);j++)
        {
            if(arr[i] == arr[j])
            {
                sum++;
            }
        }
        if(maxn<sum)
        {
            maxn = sum;
        }
        if(minn>sum)
        {
            minn = sum;
        }
    }
    sor = maxn - minn;
    int flag = 1;
    for(i=2;i<sor;i++)
    {
        if(sor%i==0)
        {
            flag = 0;
        }
    }
    if(flag==1&&sor!=0&&sor!=1)
    {
        printf("Lucky Word\n%d",sor);
    }
    else {
    printf("No Answer\n0");
    }

    return 0;
}

发表于 2023-11-15 10:02:35 回复(0)
#include <stdio.h>
#include <string.h>

int main()
{
    char arr[100] = { 0 };
    gets(arr);
    int len = strlen(arr);
    int maxn = 0;
    int minn = 100;
    int i = 0;
    for (i = 0; i < len; i++)
    {
        int j = 0;
        int count = 1;
        for (j = 1; j < len; j++)
        {
            if (arr[j] == arr[i] && i!=j)
            {
                count++;
            }
        }
        if (count > maxn)
        {
            maxn = count;
        }
        if (count < minn)
        {
            minn = count;
        }
    }
    int ret = maxn - minn;
    int flag = 1;
    for(i=2;i<ret;i++)
    {
        if(ret%i==0)
        {
            flag = 0;
        }
    }
    if ((ret != 0 && ret != 1) && flag == 1)
    {
        printf("Lucky Word\n");
        printf("%d\n", ret);
    }
    else if((ret == 0 || ret == 1) || flag == 0)
    {
        printf("No Answer\n");
        printf("0\n");
    }
    return 0;
}

发表于 2023-10-01 13:13:47 回复(0)
为什么beijing答案是0啊不是1吗
发表于 2023-07-17 20:32:54 回复(3)
#include<stdio.h>
#include<string.h>

int iszhishu(int);

int main(void) {
    char n[100];
    scanf("%s", n);
    int len = strlen(n);
    int count[len];

    int i, j;
    for (i = 0; i < len; i++) {
        count[i]=0;
        for (j = 0; j < len; j++) {
            if (n[i] == n[j]) {
                count[i]++;
            }
        }
    }

    int maxn = 0;
    int minn = 100;
    for (i = 0; i < len; i++) {
        if (count[i] > maxn)
            maxn = count[i];
        if (count[i] < minn)
            minn = count[i];
    }

    int delta = maxn - minn, result;
    if (delta < 2) {
        printf("No Answer\n");
        printf("0");
    } else {
        result = iszhishu(delta);
        if (result == 0)
            printf("%d", delta);
    }

    return 0;
}

int iszhishu(int num) {
    int i;
    for (i = 2; i < (int)(sqrt(num) + 1); i++) {
        if (num % i == 0)
        {
            printf("No Answer\n");
            printf("0");
            return 1;
        }         
    }
    printf("Lucky Word\n");
    return 0;
}

发表于 2023-06-01 11:53:20 回复(0)