帮忙找找下面代码的错误吧! 15
题目描述输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。输入输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。输出逐行...
题目描述
输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。
输入
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
输出
逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。
示例输入
I am a student
a good programming problem
ABCD abcd ABCD abcd
示例输出
a 2
o 4
A 2
我的代码是
#include<stdio.h>
#include<string.h>
void main()
{
char a[100],m;
int i,j,n,c,b[100],max;
while (gets(a))
{
m=a[0];
n=strlen(a);
for (i=0;i<n-1;i++)
{
c=1;
for (j=i+1;j<n;j++)
if (a[i]!=' '&&a[i]==a[j])
c++;
b[i]=c;
}
max=b[0];
for (i=1;i<n;i++)
{
if (max<b[i])
{
max=b[i];
m=a[i];
}
if (max==b[i])
{
if (a[i]<m)
m=a[i];
}
}
printf("%c %d\n",m,max);
}
}
可以运行,但提交了之后是wrong answer 展开
输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。
输入
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
输出
逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。
示例输入
I am a student
a good programming problem
ABCD abcd ABCD abcd
示例输出
a 2
o 4
A 2
我的代码是
#include<stdio.h>
#include<string.h>
void main()
{
char a[100],m;
int i,j,n,c,b[100],max;
while (gets(a))
{
m=a[0];
n=strlen(a);
for (i=0;i<n-1;i++)
{
c=1;
for (j=i+1;j<n;j++)
if (a[i]!=' '&&a[i]==a[j])
c++;
b[i]=c;
}
max=b[0];
for (i=1;i<n;i++)
{
if (max<b[i])
{
max=b[i];
m=a[i];
}
if (max==b[i])
{
if (a[i]<m)
m=a[i];
}
}
printf("%c %d\n",m,max);
}
}
可以运行,但提交了之后是wrong answer 展开
6个回答
展开全部
首先,我觉得你的思路有点混乱:
char a[100],m;基础不好,char是字符型,str才是字符串啊;
比较字母的时候,一个个比较的话,会用时间较长、空间较大,你的O(100^2),o(100^2);我的是O(100*52),o(100*52);
比较次数时吧,很混乱,你的O(100),o(100);我的O(52),o(52),并且只要比较一次就好;
最后啊,我个人觉得gets()与printf不配套啊,输入输出要相互配套才会不容易出错吧;
呵呵呵 不好意思 吧你的程序修改的面目全非
PS 我的电脑没装软件啊 所以没试过程序是否可行 你自己尝试下咯!!!!
#include<stdio.h>
#include<string.h>
void main()
{
char flag; / 标志最多的字母 /
str a[100],m[52]={A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z};
int i,j,b[52]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
for(i=0;i<strlen(a);i++)
scanf("%s\n",a[]);
for(i=0;i<52;i++) / 拿a[]与52个字母比较 /
{
for (j=0;j<strlen(a);j++)
if (a[j]!=' '&&a[i]==a[j]) b[i]++; / 如果相同,则加1 /
}
for (i=0;i<52;i++) / 比较次数的小 /因为b[]与m[]相互照应, /
{
max=b[0];
flag=m[0];
if (max<b[i])
{
max=b[i];
flag=m[i]; / 因为b[]与m[]相互照应,所以b[]与m[]的下标相同 /
}
}
printf("%c %d\n",flag,max);
}
char a[100],m;基础不好,char是字符型,str才是字符串啊;
比较字母的时候,一个个比较的话,会用时间较长、空间较大,你的O(100^2),o(100^2);我的是O(100*52),o(100*52);
比较次数时吧,很混乱,你的O(100),o(100);我的O(52),o(52),并且只要比较一次就好;
最后啊,我个人觉得gets()与printf不配套啊,输入输出要相互配套才会不容易出错吧;
呵呵呵 不好意思 吧你的程序修改的面目全非
PS 我的电脑没装软件啊 所以没试过程序是否可行 你自己尝试下咯!!!!
#include<stdio.h>
#include<string.h>
void main()
{
char flag; / 标志最多的字母 /
str a[100],m[52]={A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z};
int i,j,b[52]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
for(i=0;i<strlen(a);i++)
scanf("%s\n",a[]);
for(i=0;i<52;i++) / 拿a[]与52个字母比较 /
{
for (j=0;j<strlen(a);j++)
if (a[j]!=' '&&a[i]==a[j]) b[i]++; / 如果相同,则加1 /
}
for (i=0;i<52;i++) / 比较次数的小 /因为b[]与m[]相互照应, /
{
max=b[0];
flag=m[0];
if (max<b[i])
{
max=b[i];
flag=m[i]; / 因为b[]与m[]相互照应,所以b[]与m[]的下标相同 /
}
}
printf("%c %d\n",flag,max);
}
展开全部
错误很多,我随便说几个:
1.没有结束条件,也就是说你的程序运行后就会进入死循环,无法正常退出
2.人家要输入多行再一起输出结果,你这个只能输入一行就会输出结果了
3.里面的细节我根本没看,因为看起来累,哪有这样写程序的,a,b,c,i,j,m,n的变量,鬼才知道表示什么,这么短还看着累,要是长点的程序,根本没法看
1.没有结束条件,也就是说你的程序运行后就会进入死循环,无法正常退出
2.人家要输入多行再一起输出结果,你这个只能输入一行就会输出结果了
3.里面的细节我根本没看,因为看起来累,哪有这样写程序的,a,b,c,i,j,m,n的变量,鬼才知道表示什么,这么短还看着累,要是长点的程序,根本没法看
追问
第三点,我注意到了,但是,我不知道怎么样定义变量比较好?请教!!!还有,我找到错误了,只需 int b[100]={0}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1."长度不超过100"说明最长为100字符,那么字符数组a应该至少开到101,即char a[101]。
2.这样的实现并不是最好的,比较好的是开一个记录字符出现次数的数组count,以字符为下标。比如有一个字符'a',那么对应的count['a']++。你可以用这个思路改进一下。
2.这样的实现并不是最好的,比较好的是开一个记录字符出现次数的数组count,以字符为下标。比如有一个字符'a',那么对应的count['a']++。你可以用这个思路改进一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-03-02
展开全部
我来我来~
程序如下:
#include<stdio.h>
#define MAX ‘z’
#define MIN ‘A’
#define ENTER ‘\n’
#define ZERO 0
#define NAME L
int main(void)
{
char text[(int)(MAX)];
char ch;
int tag,max;
int num;
for(num=ZERO;num<=MAX;num++)
text[num]=ZERO;
printf("please enter your article.\n");
while((ch=getchar( ))!=EOF)
{
if(ch>MIN &&ch<MAX)
{
num=(int)ch;
text[num]++;
}
if(ch==ENTER)
{
for(max=ZERO,tag=num=(int)(MIN);num<=MAX;num++)
{
if(text[num]>max)
{
max=text[num] ;
tag=num;
}
}
printf("tag=%c max=%d\n",tag,max);
for(num=MIN;num<=MAX;num++)
text[num]=ZERO;
}
}
printf("the program is end.\n");
return 0;
}
程序如下:
#include<stdio.h>
#define MAX ‘z’
#define MIN ‘A’
#define ENTER ‘\n’
#define ZERO 0
#define NAME L
int main(void)
{
char text[(int)(MAX)];
char ch;
int tag,max;
int num;
for(num=ZERO;num<=MAX;num++)
text[num]=ZERO;
printf("please enter your article.\n");
while((ch=getchar( ))!=EOF)
{
if(ch>MIN &&ch<MAX)
{
num=(int)ch;
text[num]++;
}
if(ch==ENTER)
{
for(max=ZERO,tag=num=(int)(MIN);num<=MAX;num++)
{
if(text[num]>max)
{
max=text[num] ;
tag=num;
}
}
printf("tag=%c max=%d\n",tag,max);
for(num=MIN;num<=MAX;num++)
text[num]=ZERO;
}
}
printf("the program is end.\n");
return 0;
}
参考资料: 本人专利哦~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ABCD abcd ABCD abcd
用上面的测试用例时,结果是d 3.你看看是不是缺少(如果有多个字符的次数相同,只输出ASCII码最小的字符)这个的判断
用上面的测试用例时,结果是d 3.你看看是不是缺少(如果有多个字符的次数相同,只输出ASCII码最小的字符)这个的判断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询