第一次发博客,好紧脏!

来源:互联网 发布:java kindle 百度云 编辑:程序博客网 时间:2024/05/20 13:04
  我要被自己菜哭了,大概从下午15点左右吧开始写PAT的1010题。然鹅,很快的写好(= = 其实也不快),结果也和输出样例的一样。但是!!测试点2、4没通过啊没通过啊!所以我就一直调啊调啊调啊。最终弄了将近4个小时,(期间有参考了网上的思路),终于好了。没办法,我真的太菜了。以前欠的代码总是要还的=。=


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


version-1
  一开始的思路是:将输入的系数与指数模拟求导,若求导前不是常数,那么将求导后的结果存入数组内;反之,舍弃。下一步则是简单的输出。
#include <stdio.h>#define N 80int main(){    int i = 0;    int a[N],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的话就说明输入结束啦。


version-2
  改正之后,发现测试2、4过了,0、1、3又不给过啦。emmm…这里就想了好久,为此还去看了一元多项式的定义T^T (菜哭!!)。实在不行了就去百度了,想知道其他人的思路、想法是啥。然后就看到了printf("0 0")!我之前还不明白来着,后来恍然大悟:一开始要查看指数是否为0–即判断是不是常数!!!再次被寄几菜哭了。如果一开始是常数,就根本没后面的戏好嘛!!然后就改啊改。
#include <stdio.h>#define N 80int main(){    int i = 0;    int a[N],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;}


对了!想分享一下,其他人的写法。很简单的噢。要像他学习!
#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,但是调试的过程中的感觉只有自己知道。以前练习少,没有碰到这样的情况,本来挺简单的东西花了那么多时间。唔,还是要加油写代码啦~希望今天的错误与疏忽以后就不要再犯啦。
原创粉丝点击