程序设计入门——C语言 第7周编程练习 1 多项式加法(5分)

第7周编程练习

依照学术诚信条款,我保证此作业是本人独立完成的。

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

1
多项式加法(5分)

题目内容:

一个多项式可以表达为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

时间限制:500ms内存限制:32000kb
  1 #include <stdio.h>
  2 int main()
  3 {
  4     int a[101][2], b[101][2];
  5     int na, nb;    /*项数*/
  6     int i, j;
  7 
  8     /*输入*/
  9     for (i = 0; i < 101; i++)
 10     {
 11         scanf("%d %d", &a[i][0], &a[i][1]);
 12         if (a[i][0] == 0)    /*遇0结束*/
 13             break;
 14     }
 15     na = i + 1;
 16     for (i = 0; i < 101; i++)
 17     {
 18         scanf("%d %d", &b[i][0], &b[i][1]);
 19         if (b[i][0] == 0)
 20             break;
 21     }
 22     nb = i + 1;
 23 
 24     /*调试*/
 25     //printf("输入调试:\nna=%d,nb=%d\n", na, nb);
 26     //for (i = 0; i < na; i++)
 27     //{
 28     //    printf("%d %d\n", a[i][0], a[i][1]);
 29     //}
 30 
 31     //for (i = 0; i < nb; i++)
 32     //{
 33     //    printf("%d %d\n", b[i][0], b[i][1]);
 34     //}
 35 
 36 
 37     /*比较,求和*/
 38     int c[101 * 2][2];
 39     for (i = 0; i < na; i++)
 40     {
 41         c[i][0] = a[i][0];
 42         c[i][1] = a[i][1];
 43     }
 44 
 45     int nc = na;
 46     int ch;
 47     for (j = 0, ch = 1; j < nb; j++, ch = 1)
 48     {
 49         for (i = 0; i < na; i++)
 50         {
 51             if (b[j][0] == c[i][0])
 52             {
 53                 c[i][1] += b[j][1];
 54                 ch = 0;
 55                 break;
 56             }
 57         }
 58         if (ch)
 59         {
 60             nc++;
 61             c[nc - 1][0] = b[j][0];
 62             c[nc - 1][1] = b[j][1];
 63         }
 64     }
 65 
 66     /*调试*/
 67     //printf("\n求和调试:\nnc=%d\n", nc);
 68     //for (i = 0; i < nc; i++)
 69     //{
 70     //    printf("%d %d\n", c[i][0], c[i][1]);
 71     //}
 72 
 73     /*排序*/
 74     int t;
 75     for (j = 0; j < nc - 1; j++)
 76         for (i = 0; i < nc - 1 - j; i++)
 77             if (c[i][0] < c[i + 1][0])
 78             {
 79                 t = c[i][0];
 80                 c[i][0] = c[i + 1][0];
 81                 c[i + 1][0] = t;
 82 
 83                 t = c[i][1];
 84                 c[i][1] = c[i + 1][1];
 85                 c[i + 1][1] = t;
 86             }
 87 
 88     /*调试*/
 89     //printf("\n排序调试:\nnc=%d\n", nc);
 90     //for (i = 0; i < nc; i++)
 91     //{
 92     //    printf("%d %d\n", c[i][0], c[i][1]);
 93     //}
 94 
 95     /*输出*/
 96 
 97     /*输出第一项*/
 98     for (i = 0; i < nc; i++)
 99         if (c[i][1] != 0)
100         {
101             if (c[i][0] == 0)
102                 printf("%d", c[i][1]);
103             else if (c[i][0] == 1 && c[i][1] == 1)
104                 printf("x");
105             else if (c[i][0] == 1 && c[i][1] == -1)
106                 printf("-x");
107             else if (c[i][0] == 1)
108                 printf("%dx", c[i][1]);
109             else if (c[i][1] == -1)
110                 printf("-x%d", c[i][0]);
111             else
112                 printf("%dx%d", c[i][1], c[i][0]);
113             break;
114         }
115 
116     int first = i;    /*第一项行标*/
117     if (i == nc)    /*全为0*/
118         printf("0");
119 
120     /*输出第二项之后*/
121     for (i = first + 1; i < nc; i++)
122         if (c[i][1] != 0)
123         {
124             if (c[i][0] == 0)
125                 printf("%+d", c[i][1]);
126             else if (c[i][0] == 1 && c[i][1] == 1)
127                 printf("+x");
128             else if (c[i][0] == 1 && c[i][1] == -1)
129                 printf("-x");
130             else if (c[i][0] == 1)
131                 printf("%+dx", c[i][1]);
132             else if (c[i][1] == -1)
133                 printf("-x%d", c[i][0]);
134             else
135                 printf("%+dx%d", c[i][1], c[i][0]);
136         }
137 
138     /*调试*/
139 //    system("pause");
140 
141     return 0;
142 }

猜你喜欢

转载自www.cnblogs.com/Emerl/p/8858595.html
今日推荐