C语言编程,笨小猴那道,帮我看看,实在不知道出什么问题

【问题描述】笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:... 【问题描述】
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
【输入】
输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
【输出】
输出文件word.out共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
【输入输出样例1】

word.in word.out
error Lucky Word
2
【输入输出样例1解释】
单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。
【输入输出样例2】

word.in word.out
Olympic No Answer
0
【输入输出样例2解释】
单词olympic中出现最多的字母i出现了2次,出现次数最少的字母出现了1次,2-1=1,1不是质数。

这里我就没有导入文件,而采取手动输入的方式了,本人新手,有不足之处,请多指教;
dev-c++上指出的错误是:
“num=maxn-minn”这行:“maxn”undeclared here(not in a function)
“minn”undeclared here(not in a function)
【warning】data definition has no type or storage class
下一行:syntax error before“if”;
以下是我写的程序:
main()
{
int y,a[100],b[100],num,x,j,maxn,minn,i;
j=0;
for(i=0;i<100;i++)
{scanf("%d",&a[i]);
b[i]=1;
if(a[i]='\n') break;
j++;
}
for(i=0;i<=j;i++)
{for(x=i+1;x<=j;x++)
if(a[i]==a[x]) b[i]++;
}
maxn=b[0];minn=b[0];
for(i=0;i<=j;i++)
{if(b[i]>maxn) maxn=b[i];
if(b[i]<minn) minn=b[i];
}
}
num=maxn-minn;
if(num==1||num==0) y=1;
else{
for(i=2;i<=sqrt(num);i++)
{if(num%i==0) {y=0;break}
else y=1;
}
}
if(y==0) printf("Lucky Word\n%d",num);
if(y==1) printf("No Answer\n0");
}
请告诉我到底错了什么,怎么改?
展开
 我来答
bloodelf02
2009-10-06 · TA获得超过1657个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:491万
展开全部
num=maxn-minn; 应该加上类型声明

即 int num=maxn-minn; 才对

补充1: 前面的没说对, 是缺了个括号,然后

if(num%i==0) {y=0;break} break后面需要一个分号

你的程序格式有点乱

补充2:
if(a[i]='\n') break; 比较操作应该是“==”

补充3:

for(i=0;i<100;i++)
{scanf("%d",&a[i]);
b[i]=1;
if(a[i]='\n') break;
j++;
}
要改为:

for(i=0;i<100;i++)
{
a[i] = getchar();
b[i]=1;
if(a[i]=='\n')
{
break;
}
j++;
}

才会有你要的效果。

补充 4:

if(num==1||num==0) y=1;
else{
for(i=2;i<=sqrt(num);i++)
{if(num%i==0) {y=0;break}
else y=1;
}

应该改为
if(num==1||num==0) y=1;
else{y = 0;
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0) {y=1;break}
else y=0;
}

现在程序有你要的效果了,虽然凌乱,但是是一个你自己思路的可以正确执行的程序了

补充5:
下面就是完整的,包含了补充1到补充4的 编译错误到逻辑错误改动的版本。

#include <stdio.h>
#include <math.h>

int main()
{
int y,a[100],b[100],num,x,j,maxn,minn,i;
j=0;
for(i=0;i<100;i++)
{
a[i] = getchar();
b[i]=1;
if(a[i]=='\n')
{
break;
}
j++;
}

for(i=0;i<=j;i++)
{
for(x=i+1;x<=j;x++)
{
if(a[i]==a[x])
{
b[i]++;
}
}
}

maxn=b[0];minn=b[0];

for(i=0;i<=j;i++)
{
if(b[i]>maxn) maxn=b[i];
if(b[i]<minn) minn=b[i];
}

num=maxn-minn;
if(num==1||num==0)
{
y=1;
}
else
{
y =0;
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0)
{
y=1;break;
}
else y=0;
}
}
if(y==0) printf("Lucky Word\n%d",num);
if(y==1) printf("No Answer\n0");
}

补充6:(最后的补充)
下面是我提供的完整的程序,思路稍有不同,但是我相信程序结构很清晰,你可参考

#include <stdio.h> //printf 声明
#include <math.h> //sqrt 声明
#include <memory.h> // memset 声明
#include <ctype.h> // tolower声明

//下面的函数判断一个大于0的整数是不是质数
int isPrimeNumber(int inNum) //参数需要外部保证大于等于1
{
int isPrime;
int i;
if (1 == inNum)
{
isPrime = 0;
}
else
{
isPrime = 1;
for (i = 2; i <= (int)sqrt(inNum); ++i)
{
if ((inNum % i) == 0)
{
isPrime = 0;
break;
}
}
}

return isPrime;
}

int main()
{
char characters[100];
char tempChar;
int count[26]; //只需要为26个字符分别保存一个计数就够了
int maxn;
int minn;
int num;
int i; //主循环变量
int wordLength; //单词长度

memset(count, 0, 26 * sizeof(int)); //清零 count数组

//存储不超过100个字符的单词的每个字符
for(i = 0; i < 100;i++)
{
tempChar = (char)getchar();
if(tempChar =='\n')
{
wordLength = i;
break;
}
else
{
characters[i] = (char)tolower(tempChar);// 若是大写,变为小写
count[characters[i] - 'a']++; //给相应字母的计数加1
}
}

//求出最大,最小
maxn = 0;
minn = 0;
for (i = 0; i < 26; ++i)
{
if (0 == maxn)
{
maxn = count[i]; //初始化为第一个不为0的数
}
else
{
if (count[i] > maxn)
{
maxn = count[i];
}
}

if (0 == minn)
{
minn = count[i]; //初始化为第一个不为0的数
}
else
{
if (count[i] < minn && count[i] != 0)
{
minn = count[i];
}
}
}

num = maxn - minn;
if (num != 0 && isPrimeNumber(num))
{
printf("Lucky Word\n%d",num);
}
else
{
printf("No Answer\n0");
}
}
aaa833
2009-10-06 · TA获得超过717个赞
知道小有建树答主
回答量:841
采纳率:0%
帮助的人:643万
展开全部
编译错误是因为num=maxn-minn上面多了一个 }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-10-06
展开全部
Lz看起来是个新手, 初级Noip?

有问题的话可以找我 , 很乐意

tazerkinq@163.com

#include <stdio.h>
#include <math.h>
#include <string.h>

char s[101];
int y, a[100], b[100], num, x, j, maxn, minn, i;
int main() {

scanf("%s", s);
j = strlen(s);

for (i = 0; i < j; i++) {
for (x = i + 1; x < j; x++)
if (s[i] == s[x])
b[i]++;
}

maxn = b[0];
minn = b[0];
for (i = 0; i < j; i++) {
if (b[i] > maxn)
maxn = b[i];
if (b[i] < minn)
minn = b[i];
}
num = maxn - minn;
if(num==1||num==0) y=1;
else {
for(i=2;i<=sqrt(num);i++)
{ if(num%i==0) {y=0;break;}
else y=1;
}
}
if(y==0) printf("Lucky Word\n%d",num);
if(y==1) printf("No Answer\n0");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luochangjunatf
2009-10-06 · TA获得超过113个赞
知道答主
回答量:48
采纳率:0%
帮助的人:0
展开全部
你错的不少, num=maxn-minn;
的前面多了个 } {if(num%i==0) {y=0;break}
的baeak 的后面少了个;,算法也有问题,写程序要有良好的习惯,同一级的{}对齐。好找错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mz_mxc
2009-10-05 · TA获得超过228个赞
知道答主
回答量:283
采纳率:0%
帮助的人:147万
展开全部
这么麻烦???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式