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 评测结果