PAT:1002. A+B for Polynomials (25) 部分错误

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//【warning】double 输入%lf,输出%f
struct arr
{
  int tag;
  double data;
}arr[1005];

int main()
{
  memset(arr,0,sizeof(arr));
  int t1,t2,tmp,maxI=0;          //maxI记录最多多少项
  double tdata;

  for(int I=0 ; I<2 ; ++I)        //输入第一个和第二个多项式
  {
    scanf("%d",&t1);          //多项式有t1项
   /* if(t1>maxI)
      maxI=t1;*/
    for(int i=0 ; i<t1 ; ++i)      //输入多项式
    {
      scanf("%d",&tmp);
      arr[tmp].tag=1;          //修改过,设置为有效
      scanf("%lf",&tdata);
      arr[tmp].data+=tdata;      //加上这项前系数
      if(arr[tmp].data==0)      //正负抵消,没有此项了,设为无效
        arr[tmp].tag=0;
    }
  }
  int len=0;                //len记录多项式项数
  for(int i=0 ; i<=1000 ; ++i)
    if(arr[i].tag==1)
      ++len;
  printf("%d",len);
  if(len!=0)
  {
    int cnt=0;      //【caution】记录输出个数,控制空格数量,不一定是输出到指数为0才结束
  printf(" ");
    for(int i=1000 ; i>=0 ; --i)        //从后向前找tag为1的有效项
      if(arr[i].tag==1)
      {
        printf("%d %.1f",i,arr[i].data);
    ++cnt;
        if(cnt!=len)
          printf(" ");          //保证只有中间有空格
      }
  }
  printf("\n");
  //system("pause");
  return 0;
}
posted on 2015-02-17 22:54  Evence  阅读(262)  评论(0编辑  收藏  举报