首页 > 试题广场 >

笨小猴

[编程题]笨小猴
  • 热度指数: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不是质数。
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)
有点菜写了一大段
#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)
#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 <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)
#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)
from collections import Counter
s=input()
d=Counter(s)

max=max(d.values())
min=min(d.values())
t=max-min

flag=0
if t==1&nbs***bsp;t==0:
    flag=1
for i in range(2,t):
    if t%i==0:
        flag=1
        break

if flag==0:
    print("Lucky Word")
    print(t)
else:
    print("No Answer")
    print(0)

发表于 2025-11-27 22:26:37 回复(0)
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main() {
    string s;
    int mat[26] = {0};
    int max = 0;
    int min = 100000;
    getline(cin, s);
    for (int i = 0; i < s.length(); ++i) {
        mat[s[i] - 'a']++;
    }
    for (int i = 0; i < 26; i++) {
        if(mat[i]>0){
            if(mat[i]>max) max=mat[i];
            if(mat[i]<min) min=mat[i];
        }
    }
    int ans;
    ans = max - min;
    bool flag = true;
    for (int i = 2; i <= sqrt(ans); i++) if (ans % i == 0) flag = false;
    if (ans <2) cout << "No Answer"<<endl<<'0';
    else if (ans ==2||flag) cout << "Lucky Word"<<endl<<ans;
    else cout << "No Answer"<<endl<<'0';
    return 0;
}

发表于 2025-11-07 20:17:29 回复(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)
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True
s = input()
li = []
for i in s:
    li.append(s.count(i))
maxn_minn = max(li)-min(li)
if is_prime(maxn_minn):
    print('Lucky Word')
    print(maxn_minn)
else:
    print('No Answer')
    print(0)
发表于 2025-07-11 19:58:12 回复(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)
int main()
{
    char str[100] = { 0 };
    gets(str);
    int len = strlen(str);
    int maxn = 0;
    int minn = len;
    int i = 0;
    int j = 0;
    for (i = 0; i < len; i++)
    {
        int count1 = 0;
        for (j = 0; j < len; j++)
        {
            if (str[j] == str[i])
            {
                count1++;
                if (count1 > maxn)
                {
                    maxn = count1;
                }
                if(count1 < minn)
                {
                    minn = count1;
                }
            }
        }
    }
    int n = maxn - minn;
    int found = 0;
    if (n != 1)
    {
        for (i = 2; i <= (int)sqrt(n); i++)
        {
            if (n % i == 0)
            {
                found = 1;
                break;
            }
        }
    }
    else
    {
        found = 1;
    }
    if (!found)
    {
        printf("Lucky Word\n");
        printf("%d\n", n);
    }
    else
    {
        printf("No Answer\n");
        printf("%d\n", 0);
    }
    return 0;
}
发表于 2025-01-01 21:07:39 回复(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)
dicts = {}
char = input().strip()
for i in char:
    dicts[i] = dicts.get(i,0)+1

arr = sorted([ v for k,v in dicts.items()])
number =(arr[-1] - arr[0])
medi = number//2+1
 
if number in [0,1]:
    print('No Answer\n0')
elif number in [2,3]:
    print(f'Lucky Word\n{number}')
else  :
    for i in range(2,medi):
        if number%i==0:
            print(f'No Answer\n{number}')
            break
        if i== medi-1:
            print(f'Lucky Word\n{number}')

    

发表于 2024-09-27 12:43:54 回复(0)
#include <stdio.h>
#include<string.h>
int Prime_munber(int diff) {
    int key = 0;
    for (int i = 2; i < diff; i++) {
        if (diff % i == 0) {
            key = 1;
            break;
        }
    }
    if ( key == 1 || diff == 0 || diff == 1) {
        return 0;
    } else {
        return 1;
    }
}
int main() {
    int maxn = 0;
    int minn = 100;
    char word[100];
    int arr[26] = { 0 };
    gets(word);
    int wordn = strlen(word);
    for (int i = 0; i < wordn; i++) {
        arr[word[i] - 'a']++;

    }
    for (int j = 0; j < wordn; j++) {
        if (maxn < arr[word[j] - 'a']) {
            maxn = arr[word[j] - 'a'];
        }
        if (minn > arr[word[j] - 'a']) {
            minn = arr[word[j] - 'a'] ;
        }
    }
    // printf("%d\n", maxn);
    // printf("%d\n", minn);
    int count = maxn - minn ;
    if (count == 1) {
        count--;
    }
    int num = Prime_munber(count);
    if (num == 0) {
        printf("No Answer\n");
        printf("%d", count);
    } else {
        printf("Lucky Word\n");
        printf("%d", count);
    }
}对于
if (count == 1) {
        count--;
    }这句我为了解决beijing这个例子maxn-minn==0写的不知道为啥电脑判断是0难道不是i(maxn):2  (minn): 1   2 - 1 == 1 才是呀,求解惑

发表于 2024-09-01 23:20:29 回复(1)
int prime(int m)
{
	int i = 0;
	for (i = 2; i <= sqrt(m); i++)
	{
		if (m % i == 0)
		{
			return 0;
		}
	}
	return 1;
}
int main()
{
	char arr[100] = { 0 };
	int i = 0;
	scanf("%s", arr);
	int size = (int)strlen(arr);
	int maxn = 0, minn = size;
	int flag = 0;
	//找maxn以及minn
	for (i = 0; i < size; i++)
	{
		int count = 0;
		for (int j = 0; j < size; j++)
		{
			if (arr[i] == arr[j])
			{
				count++;
			}
		}
		if (count > maxn)
		{
			maxn = count;
		}
		else if (count < minn)
		{
			minn = count;
		}
	}
	int m = maxn - minn;
	if (m > 1)
	{
		flag = prime(m);
	}
	if (flag == 1)
	{
		printf("Lucky Word\n");
		printf("%d", m);
	}
	else
	{
		printf("No Answer\n");
		printf("0");
	}
	return 0;
}

发表于 2024-08-31 18:19:18 回复(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)

问题信息

难度:
58条回答 4177浏览

热门推荐

通过挑战的用户

查看代码
笨小猴