首页 > 试题广场 >

笨小猴

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

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

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


输入描述:
一行由小写字母组成的字符串,并且长度小于100。


输出描述:
共两行,第一行是一个字符串,第二行是一个整数。
假设输入的的单词是Lucky Word,那么输出“Lucky Word”,第二行输出maxn-minn的值。
否则输出“No Answer”,第二行输出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 <stdio.h>
#include<string.h>
int main() {
    int a, b;
    char c[1000]={};
    scanf("%s",c);
    int sum[1000]={};
    for(int d=0;d<=strlen(c);d++){
        sum[c[d]-'a']++;
    }
    int max=1,min=10;
    for(int e=0;e<=25;e++){
        if(sum[e]==0){
            continue;
        }
        else if(sum[e]!=0){if(sum[e]>max){
            max=sum[e];
        }
        if(sum[e]<min){
            min=sum[e];
        }
        }
    }
   // printf("%d %d",max,min);
    int z=0;
    if(max-min<2){
        printf("No Answer\n");
        printf("0");
    }
    else{
       
        for(int g=2;g<max-min;g++){
            if((max-min)%g==0){
                z++;
            }
    }
    if(z==0){
        printf("Lucky Word\n");
        printf("%d",max-min);
    }
    else{
        printf("No Answer\n");
        printf("0");
    }
    }
   
    return 0;
}
发表于 2025-08-14 19:03:01 回复(0)
#include<stdio.h>
#include<string.h>
int Is_Prime(int result)
{
    int i = 0;
    if(result==0||result == 1)
    return 0;
    if(result == 2)
    return 1;
    else
    {
        for(i=2;i<result;i++)
      {
        if(result % i ==0)
        {
            return 0;
        }
      } 
      return 1 ;
    }   
}
void init_arr(int arr[100])
{
    int i = 0;
    for(i=0;i<100;i++)
    {
        arr[i]=0;
    }
}
void function(int arr[100],int sz)
{
    int i = 0;
    int max = 0;
    int min = 100;
    int result = 0;
    for(i=0;i<sz;i++)
    {
        if(arr[i]>max)
        {
            max = arr[i];
        }
        if(arr[i]<min)
        {
            min = arr[i];
        }
    }
    result = max -min;
    if(Is_Prime(result))
    {
        printf("Lucky Word\n%d",result);
    }
    else
    {
        printf("No Answer\n0");
    }
}
int main()
{ 
    char input[100];
    int arr[100];
    scanf("%s",input); 
    int sz = strlen(input);
    int i = 0;
    int j = 0;
    init_arr(arr);
    for(i=0;i<sz;i++)
    {
       int count = 0;
       for(j=0;j<sz;j++)
       {
           if(input[i]==input[j])
           {
              count++;
           }
       }
       arr[i]=count;
    }
    
    function(arr,sz);
    return 0;
}

发表于 2025-01-07 11:28:51 回复(0)
#include<stdio.h>
#include<string.h>
int iszhi(int num) {
    if (num <= 1) {
        return 0;
    }
    for (int i = 2; i * i < num; i++) {
        if (num % i == 0) {
            return 0;   //不是质数
        }
    }
    return 1;

}

int main() {
    char word[100];
    int maxn = 0, minn = 1000, numm = 0;
    int lencount[26] = {0};
    while (scanf("%s", word) != EOF) {
        //出现次数最多
        for (int i = 0; i < strlen(word); i++) {
            //eg:banana 其中word[0]=b  b-a=1
            lencount[word[i] - 'a']++;
        }
        for (int i = 0; i < 26; i++) {

            if (maxn < lencount[i]) {
                maxn = lencount[i];
            }
            //printf("%d\n", maxn);
            if (minn > lencount[i] && lencount[i] != 0) {
                minn = lencount[i];
            }

        }
       
      //printf("%d---\n",maxn);
        //printf("%d---\n",minn);
        numm = maxn - minn;
        //printf("%d--\n",numm);
        if (iszhi(numm) && numm != 0&&numm!=1) {
            printf("Lucky Word\n%d", numm);
        } else {
            printf("No Answer\n0");
        }
    }
    return 0;
}
发表于 2024-11-01 16:56:17 回复(0)
有点菜写了一大段
#include <stdio.h>

int main() {
    char chan[100]={};int n=0,su[100]={};

    //将字符串输入到数组中,并获数组最后一个元素下标
    while (scanf("%c",&chan[n])!=EOF) {
        n++;
    }
    n-=2;
    
    
    //用数组记录字符串的每一位出现的次数
    for (int x=n; x>=0; x--) {
        su[x]=0;
        for (int j=0; j<=n; j++) {
            if (chan[x]==chan[j]) {
                su[x]++;
            } 
        }
    }

    //将数组顺序改为 最小数放在最前面 最大数放在最后面

    int huan;//交换区
    int cd=n;//保存n值
    for (int x=0; x<=n; x++) {
        cd=n;
        for (int y=1; y<=n; y++) {
            if (su[cd]<su[cd-1]) {
                huan=su[cd];
                su[cd]=su[cd-1];
                su[cd-1]=huan;
            }
            cd--;
        }
    }

    //计算该字符串最小次与最大次出现次数相减是否为质数
    
    int ca=su[n]-su[0];//最大次与最小次的差值
    int zs=0;//记录是否有除了1和本身外其他的数能除尽,有则变量加1,没有则不变

    if (ca==0||ca==1) {
        printf("No Answer\n0");
    }
    else {
    for (int x=2; x<ca; x++) {
        if (ca%x==0) {
            zs++;
        }
    }
    if (zs==0) {
        printf("Lucky Word\n%d",ca);
    }
    else {
        printf("No Answer\n0");
    }
    }
    //测试su数组中的值是否正确
    /*for (int x=0 ; x<=n; x++) {
        printf("%d",su[x]);
    }
    printf("\n");
    printf("%d",ca);*/
    return 0;
}


发表于 2024-10-24 21:06:30 回复(0)
#include <stdio.h>
#include <ctype.h>

#define MAX_NUM  100;

int main() {
    char word[100] = "0";
    char num[26] = {0}; //计算字母数量的字符串
    scanf("%s",word);

    //判断是否为小写字母
    for (int i = 0; word[i]; i++) {
        if (isalpha(word[i])){
            num[tolower(word[i]) - 'a']++;
        }
    }
    
    //找出最大最小数
    int maxn = 0, minn = MAX_NUM;
    for (int i = 0; i < 26; i++) {
        if (num[i] > 0){
            if (num[i] > maxn){
                maxn = num[i];
            }
            if (num[i] < minn){
                minn = num[i];
            }
        }
    }
    int ret = maxn - minn;
    int count = 0;
    
    //判断是否质数
    for (int i = 2; i < ret; i++) {
        if (ret % i == 0){
            count++;
        }
    }
    //0和1不是质数
    if (ret == 0 || ret == 1){
        printf("No Answer\n");
        printf("0");
    }else{
        if (count == 0){
            printf("Lucky Word\n");
            printf("%d",ret);
        }
        else{
            printf("No Answer\n");
            printf("0");
        }
    }
    return 0;
}
//
// Created by Wilbur Lee on 6/7/2024.
//

发表于 2024-07-06 20:48:51 回复(0)
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
// 判断质数
bool is_prime(int n)
{
    // 质数的定义 >=1 的数, 只能被1和本身整除
    if(n <= 1)
    {
        return false;
    }
    else{
        // 质数是一个合数, c = a*b, a和b不可能同时大于sqrt(n)
        for(int i = 2; i*i<=n; ++i)
        {
            if(n%i == 0)
            {
                return false;
            }
        }
    }
    return true;
}


int main() {
    // 获取并且存放字符串
    char str[100]={0};
    gets(str);
    // 使用一个数组用于记录字母出现的次数
    int arrcount[26]={0};
    for(int i = 0; i<strlen(str); ++i)
    {
        arrcount[str[i] - 'a']++;
    }

    // 遍历数组选出出现次数最多和最少
    int maxn = 0, minn = 100;
    int count = 0;
     for(int i = 0; i<26; ++i)
    {
        // 如果出现的次数不为0我们进行判断
        if(arrcount[i] != 0)
        {
            count = arrcount[i];
            // 次数比最大还大
            if(count>maxn)
            {
                maxn = count;
            }
            // 次数比最小还小
            if(count<minn)
            {
                minn = count;
            }
        }
    }
    // 差距
    int gap = maxn - minn;
    // 判断是否是质数,换成相应的输出
    if(is_prime(gap))
    {
        printf("Lucky Word\n");
        printf("%d\n", gap);
    }
    else{
        printf("No Answer\n");
        printf("%d\n", 0);
    }
    return 0;
}

发表于 2024-06-16 08:36:16 回复(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 <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)
#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)
#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)
为什么beijing答案是0啊不是1吗
发表于 2023-07-17 20:32:54 回复(3)
#include <stdio.h>

int main()
{
    char arr[106] = {0};
    int count[28] = {0};
    int max = 0,min  = 101,t = 0;
    scanf("%s",arr);
    for(int i = 0;arr[i];i++)
    {
        t = arr[i]-'a';
        count[t]++;
        if(count[t]>max) max = count[t];//求最大
    }
    
    for(int i = 0;i<=25;i++)
    {
        if(count[i]<min && count[i] != 0) min = count[i];//求最小
    }
    t = max-min;//差值
    //putchar(t+'0');
    if(t>1)
    {
        for(int i = 2;i<=t/i;i++)//判断是否为质数
        {
            if(t%i==0)
            {
                puts("No Answer");
                putchar('0');
                return 0;
            }
        }
        printf("Lucky Word\n%d",t);
        return 0;
    }
    puts("No Answer");
    putchar('0');
    return 0;
}

发表于 2023-04-04 08:30:09 回复(0)

问题信息

难度:
32条回答 4180浏览

热门推荐

通过挑战的用户

查看代码
笨小猴