标签:涵盖 试题 而且 测试用例 ued opened 输入格式 clu pen
这个小题目吧我折磨的够呛,,主要在于特殊情况考虑不周,测试用例老是通不过。。
做法:用一个数组来存储多项式,用下标表示幂次数,数组元素值表示对应系数
输出特殊格式考虑:系数和幂次数为0,1,-1的情况,负系数的对加号输出的影响
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。
输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。
输入样例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
输出样例:
4x6+6x5+12x3+12x2+12x+40
1 #include <stdio.h> 2 #include <math.h> 3 4 int main() { 5 6 int coeff[101]={0}; 7 int p,c; //power,coeff 8 int cnt_coeff = 0; //相加后多项式非0系数的个数 9 int flag = 0; 10 11 //读入两个多项式并相加 12 for(int i=0;i<2;i++){ 13 p=0, c=0; 14 do{ 15 scanf("%d %d",&p,&c); 16 coeff[p] += c; 17 }while(p!=0); 18 } 19 20 //统计相加后多项式非0系数的个数 21 for(int i=100;i>-1;i--){ 22 if(coeff[i]!=0){ 23 cnt_coeff += 1; 24 } 25 } 26 // 输出为0 27 if(cnt_coeff==0){ 28 printf("%d\n",cnt_coeff); 29 } 30 else{ 31 for(int i=100;i>-1;i--){ 32 //从第二项开始,正系数项前面打印+号 33 if(flag && coeff[i]>0){ 34 printf("+"); 35 } 36 //讨论系数,幂次数为0,1,-1的输出情况 37 if(i!=0){ 38 if(i==1){ 39 if(coeff[1]==1){ 40 printf("x"); 41 }else if(coeff[1]==-1){ 42 printf("-x"); 43 }else if(coeff[i]!=0){ 44 printf("%dx",coeff[i]); 45 } 46 }else{ 47 if( coeff[i]==1){ 48 printf("x%d",i); 49 }else if(coeff[i]==-1){ 50 printf("-x%d",i); 51 }else if(coeff[i]!=0){ 52 printf("%dx%d",coeff[i],i); 53 } 54 } 55 56 }else{ 57 if(coeff[0] != 0){ 58 printf("%d\n",coeff[0]); 59 } 60 if(coeff[0] == 0){ 61 printf("\n"); 62 } 63 } 64 //只要coeff[i]!=0,那么输出的项且被涵盖在上述分支当中, 65 //因此循环第一次执行到这里并满足条件时第一项已经输出 66 if(coeff[i]!=0){ 67 flag = 1; 68 } 69 } 70 } 71 72 73 return 0; 74 }
标签:涵盖 试题 而且 测试用例 ued opened 输入格式 clu pen
原文地址:https://www.cnblogs.com/Jasonljy/p/10092402.html