先贴一下这个题目:
这个题目,看上去并不复杂。
第一眼,感觉有些像链表的一元多项式的求和,当时只想了这个思路,但是没有去实践,第二天,时间的时候出了问题,发现链表的输入没有办法停止,还是出在了对题目的理解上,不知道当指数为0的时候就不再录入。现在想一下,如果仍然使用链表,用while(1)无限循环,然后当有0,录入进去后,停止创建结点,似乎也是可行的,但是始终还是很麻烦,有一种被坑了的感觉;
然后,(还没有在网上搜索如何循环录入整数),用字符数组来代替,当getchar录到回车的时候,停止输入,看似是个好方法,但是没有考虑到负数的问题;
接着,我还是选择用整数数组,发现了这一点,可以用无限循环中加if判断语句来在录入指数0后及时跳出。这样一来,这个题目的大体框架完成了。得到了19分得主体成绩。
然而,还是部分正确的。所以再去看了看题目,发现题目提到了一个零多项式的问题,然而在我的程序中,并没有体现这个问题。
零多项式是什么?这是第一个问题。
原谅我数学(啊,拍砖)
零多项式即多项式=0,所以,按照题目要求来看,零多项式的指数系数都是0,需要表示为“0 0”,我在第一次思考的时候,是受题目中例子的影响,直接将常数项所得的求导结果不做表示,没有想到,这与零多项式是不同的,这个思维上的错误与我上学以来在理科问题上犯得许多错误是一样的!
于是我仅仅添加了刚开始为零多项式的情况,但是,还需要考虑到,如果变成零多项式会是什么结果?那么从哪里会变成零多项式呢,即常数项,又添加了条件
做题需看题,思考需仔细,另外,注意判题结果显示,两个错误所用时间相同,可推知两个错误在同一个判断条件下生成,这是一个小技巧。
贴上代码:
#include
int main()
{
int a[100],i=0,t,N;
while(1)
{
scanf("%d",&a[i]);
if(a[i]==0&&i%2) break;
i++;
}//写的过程中,这里实现在指数输入0之后才结束,需要思考
N=i+1;
if(a[1]==0)
printf("0 0");//提交一次,部分正确,19分,后重新读题,发现零多项式的问题,这里是零多项式的情况,修复正确,22分,但还有一个错误;
//修复过程:想到变成零多项式的情况,即本来是常数项,后来变成了零多项式,那么不能完全不显示,根据题意,仍应显示0 0,所以当原多项式为常数时应该可以直接显示0 0
//发现读题目还是很重要的,部分正确就是一些点没有考虑到,然后,可以分析运行时间,特殊情况下什么时候会报答案错误,时间相同,那么判断的点应该相同
else
{
for(i=0;i=0)
printf("%d %d",a[0],a[1]);
for(i=2;i=0)
printf(" %d %d",a[i],a[i+1]);
}
}
printf("\n");
return 0;
}