第一次发博客,好紧脏!

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


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


version-1
  一开始的思路是:将输入的系数与指数模拟求导,若求导前不是常数,那么将求导后的结果存入数组内;反之,舍弃。下一步则是简单的输出。
#include <stdio.h>
#define N 80

int 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 80

int 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,但是调试的过程中的感觉只有自己知道。以前练习少,没有碰到这样的情况,本来挺简单的东西花了那么多时间。唔,还是要加油写代码啦~希望今天的错误与疏忽以后就不要再犯啦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值