您的位置:首页 > 其它

第一次发博客,好紧脏!

2017-10-17 19:34 141 查看
  我要被自己菜哭了,大概从下午15点左右吧开始写PAT的1010题。然鹅,很快的写好(= = 其实也不快),结果也和输出样例的一样。但是!!测试点2、4没通过啊没通过啊!所以我就一直调啊调啊调啊。最终弄了将近4个小时,(期间有参考了网上的思路),终于好了。没办法,我真的太菜了。以前欠的代码总是要还的=。=

  想着自己都那么菜了,就不要挂代码出来了。但是还是想记录一下菜鸡的成长道路。毕竟,要坚强的菜下去。

[b]version-1[/b]

  一开始的思路是:将输入的系数与指数模拟求导,若求导前不是常数,那么将求导后的结果存入数组内;反之,舍弃。下一步则是简单的输出。

#include <stdio.h>
#define N 80

int main()
{
int i = 0;
int a
,j;
int exp,coe;
while ( scanf("%d %d",&coe,&exp) != EOF )
{
coe = exp * coe;
exp -= 1;
if ( exp == -1 )
break;
else
{
a[i] = coe;
a[i+1] = exp;
i += 2;
}
}
for ( j = 0 ; j < i - 1 ; j++ )
{
printf("%d ",a[j]);
}
printf("%d",a[i-1]);
return 0;
}


  但我发现while里有毛病。因为输出时需要跳出while循环的,按我的写法,只有当
exp = -1
时才会跳循环。而输入样例:
3 4 -5 2 6 1 -2 0
中有常数
-2
,在本例中可以正常输出。但是
3 4 -5 2
就不行,所以我就改了。想着判断最后一个字符是不是换行的
\n
,true的话就说明输入结束啦。


[b]version-2[/b]

  改正之后,发现测试2、4过了,0、1、3又不给过啦。emmm…这里就想了好久,为此还去看了一元多项式的定义T^T (菜哭!!)。实在不行了就去百度了,想知道其他人的思路、想法是啥。然后就看到了
printf("0 0")
!我之前还不明白来着,后来恍然大悟:一开始要查看指数是否为0–即判断是不是[b]常数
!!!再次被寄几菜哭了。如果一开始是常数,就根本没后面的戏好嘛!!然后就改啊改。[/b]

#include <stdio.h>
#define N 80

int main()
{
int i = 0;
int a
,j;
int flag = 1;
char ch;
int exp,coe;
while ( scanf("%d%d%c",&coe,&exp,&ch) != EOF )
{
if ( exp == 0 && flag == 1)
printf("0 0");
else
{
coe = exp * coe;
exp = exp - 1;
if ( exp == -1 )
break;
else
{
a[i] = coe;
a[i+1] = exp;
i += 2;
flag = 0;
}
}
if ( ch == '\n' )
break;
}
if(!flag)
{
for ( j = 0 ; j < i - 1 ; j++ )
printf("%d ",a[j]);
printf("%d",a[i-1]);
}
return 0;
}


4000

对了!想分享一下,其他人的写法。很简单的噢。要像他学习!

#include<stdio.h>

int main()
{
int cof;
int exp;
int isfirst = 1;
while(scanf("%d%d",&cof,&exp)!=EOF)
{
if(exp != 0)
{
if(!isfirst)
printf(" ");
printf("%d %d",cof*exp,exp-1);
isfirst = 0;
}

}
if(isfirst)
printf("0 0");
return 0;
}


来源:http://linest.github.io/blog/2013/04/13/1/

总结:不要看只有version-1&2,但是调试的过程中的感觉只有自己知道。以前练习少,没有碰到这样的情况,本来挺简单的东西花了那么多时间。唔,还是要加油写代码啦~希望今天的错误与疏忽以后就不要再犯啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: