C语言 笨小熊

2025-03-10 04:57:04
推荐回答(2个)
回答1:

问题有三个:
第一、输入的n表示case的数目,而不是你字符的长度
第二、每个case,也就是每个单词的长度是不定的,而不是100
第三、单词与单词之间互不相干,不能整体都加到a这个数组里,你记录的时候,单词都记在一块了,所以有问题。

我把这个重写了一下,你可以参考一下。

#include
#include

#define MAX(x,y) (((x)>(y))?(x):(y))
#define MIN(x,y) (((x)<(y))?(x):(y))

void get_num(int a[], char str[]) // 得到每个字母的个数
{
int i = 0;
while (str[i])
a[str[i++]-'a'] ++;
}

bool is_prime(int x) // 判断是不是质数
{
if (x == 0 || x == 1)
return false;
for ( int i=2; i*i<=x; i++)
if (x%i == 0)
return false;
return true;
}

int main()
{
int T; char str[105];
int a[26], minn, maxn;
scanf("%d", &T); // 第一个输入的整数
while (T --)
{
scanf("%s", str); // 每次输入的单词,注意这里的输入都是小写字母的,没有空格
minn = 100; // 将minn设为最大值
maxn = 0; // 讲maxn设为最小值
memset(a, 0, sizeof(a)); // 将记录的数组清0
get_num(a, str);
for ( int i=0; i<26; i++)
if (a[i]) // 我这个单词一定是要出现过,这样才能判断是不是出现最多的还是最少的
{
maxn = MAX(maxn, a[i]);
minn = MIN(minn, a[i]);
} // 这里不用排序,排序的复杂度至少是O(nlogn),而得到极值的复杂度只要扫一遍
if (is_prime(maxn-minn)) // 看看最大和最少的差是不是质数
printf("Lucky Word\n%d\n", maxn-minn);
else
printf("No Answer\n0\n");
}
return 0;
}

回答2:

#include "stdio.h"
#include "conio.h"

void input_string_count(int *n)
{
while(1)
{
printf("please input string count(1-100): ");
scanf("%d",n);
printf("n=%d\n",*n);
if((*n>=1)&&(*n<100))
break;
printf("warning:string count must in 1 to 100!\n");
}
}
int input_string(char *str)
{
int j;

scanf("%s",str);
for(j=0;j {
if((str[j]<'a')||(str[j]>'z'))
{
printf("char in string mast in \"a\" to \"z\"\n");

return -1;
}
}
return 0;
}
int max_min_sub(int *num,int count)
{
int i,max,min;
max=num[0];
min=num[0];
for(i=1;i {
if(max if(min>num[i]) min=num[i];
}

return max-min;
}

int is_prime_num(int n)
{ int i,x;
if(n<2)
return 0;
x=n;
for(i=2;i if(n%i==0) return 0;
x=n/i;
}
return 1;
}

void luck_word_sort(char *str)
{
int base[26],i,j,mm;
int num[26],count;
for(i=0;i<26;i++)
base[i]=0;

for(i=0;i base[str[i]-'a']++;

for(i=0,j=0;i<26;i++)
if(base[i]!=0)
num[j++]=base[i];
count=j;
mm= max_min_sub(num,count);
if(is_prime_num(mm))
printf("\nLucky Word\n%d\n",mm);
else
printf("\nNo Answer\n%d\n",mm);
}

main()
{
int i,j,n,num[26],count,mm;
char str[100][100];
input_string_count(&n);
i=0;
while(i {
printf("please input sting %d,total %d:",i+1,n);
if(input_string(str[i]))continue;

i++;
}

for(i=0;i luck_word_sort(str[i]);

}