PAT甲级_PAT Advanced Level 1002. A+B for Polynomials (25) C

1   题目要求:

     https://www.patest.cn/contests/pat-a-practise/1002

2   源代码

#include <stdio.h>
#include <stdlib.h>
//#include<string.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop 
   这本程序一定要好好看看,绝妙
 */
int main() {
/*语法点:定义数组,变量 */
    float a[1001];
    int i;
    int k;
    float temp;
/*语法点:1 for循环 
          2 数组初始化          */
    for(i=0;i<=1000;i++){
        a[i]=0.0f;
    }
/*语法点:1 输入语句scanf
          2 while循环  
          3 加法赋值语句*/
    scanf("%d",&k);
/* i是数组下标,这里其实是多项式的指数。也就是之前开辟了空间为1001的数组,输入指数的时候,其实就是在1001的数组空间里找对应a[i],
   然后将该项的系数赋给a[i],这是这道程序的灵魂!这里一定要记下来。以后会经常用到这种方法!可以自己画画图理解一下。
*/
    while(k--){
        scanf("%d%f",&i,&temp);
        a[i]+=temp;
    }     
//这里的k是多项式的项数,其实也就是多项式系数的个数,数组中非零元素的个数
    scanf("%d",&k);
    while(k--){
        scanf("%d%f",&i,&temp);
        a[i]+=temp;    
    }
//判断多项式的项数,其实就是循环这个数组,不为0,就把k+1,就是多项式的个数,也就是第一个我们要打印的值
    k =0;
    for(i=0;i<=1000;i++){
        if(a[i]!=0.0){
            k++;
        }
    } 
     printf("%d",k);
//项数为0则只输出k,且不带空格,k不为0,其实就是多项式为0的情况下,打印空格,准备下面的输出
     if(k!=0)
         printf(" ");
/* 倒序循环a[i]这个数组,因为输出要求指数从大打小排列,所以倒序遍历数组,如果数组元素不为0,就输出数组下标与对应的数,就是指数和系数
   这样要注意输出方式!!!
   输出一对,我们就把k减1,如果k不为0,则输出空格,k=0,则表示其实已经遍历完了。继续下一论循环,直到把整个数组遍历完。   */
         for(i=1000;i>=0;i--){
             if(a[i]!=0.0){
                 printf("%d ",i);
                 printf("%0.1f",a[i]);
                 k--;
                 if(k!=0)
                  printf(" ");
             }    
         }        
     return 0;
    }

3  评测结果

    

 

posted @ 2018-03-14 14:39  sunnybowen  阅读(287)  评论(0编辑  收藏  举报