|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本小白特爱学习
真的
这道题我一星期没做出来了 茶不思饭不想 都饿瘦了
好了不bb了 上面都是假的
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
题就是这样的,主要是想了解这题该怎么解 求个详细(特别详细的那种.)的解题方法
谢谢各位大神了 有劳了
- #include <stdio.h>
- typedef struct
- {
- int item[2]; // 第0个表示幂次,第1个表示该幂次的系数
- } Polynomial;
- int main(void)
- {
- Polynomial polynomial1[100];
- Polynomial polynomial2[100];
- Polynomial result[100];
- int i, j, k;
- int i1, j1, k1;
- char op;
- i = 0;
- while(1)
- {
- scanf("%d %d", &polynomial1[i].item[0], &polynomial1[i].item[1]);
- i++;
- if(polynomial1[i - 1].item[0] == 0)
- {
- break;
- }
- }
- j = 0;
- while(1)
- {
- scanf("%d %d", &polynomial2[j].item[0], &polynomial2[j].item[1]);
- j++;
- if(polynomial2[j - 1].item[0] == 0)
- {
- break;
- }
- }
- k = 0;
- i1 = 0;
- j1 = 0;
- while(1)
- {
- if(i1 == i || j1 == j)
- {
- break;
- }
- if(polynomial1[i1].item[0] > polynomial2[j1].item[0])
- {
- result[k].item[0] = polynomial1[i1].item[0];
- result[k].item[1] = polynomial1[i1].item[1];
- k++;
- i1++;
- }
- else if(polynomial1[i1].item[0] == polynomial2[j1].item[0])
- {
- result[k].item[0] = polynomial1[i1].item[0];
- result[k].item[1] = polynomial1[i1].item[1] + polynomial2[j1].item[1];
- k++;
- i1++;
- j1++;
- }
- else
- {
- result[k].item[0] = polynomial2[j1].item[0];
- result[k].item[1] = polynomial2[j1].item[1];
- k++;
- j1++;
- }
- }
- k1 = 0;
- op = ' ';
- while(1)
- {
- if(k1 == k)
- {
- break;
- }
- if(result[k1].item[1] == 0)
- {
- k1++;
- continue;
- }
- if(op != ' ')
- putchar(op);
- op = '+';
- if(result[k1].item[0] == 0)
- {
- printf("%d", result[k1].item[1]);
- k1++;
- continue;
- }
- if(result[k1].item[0] == 1)
- {
- printf("%d", result[k1].item[1]);
- k1++;
- putchar('x');
- continue;
- }
- printf("%d", result[k1].item[1]);
- putchar('x');
- printf("%d", result[k1].item[0]);
- k1++;
- }
- putchar('\n');
- return 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
- 请按任意键继续. . .
复制代码
这是我写的,不要指望这段代码可以通过那个测试,因为我也不知道哪里错了
程序本来就不应该是通用的,而应该是专用的,我写的代码通过了我的测试,
输入
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
输出
4x6+6x5+12x3+12x2+12x+40
这样就行了,如果你非要说我写的代码错了,可以,告诉我,哪里错了,我有兴趣的话,会改正,但是
我看不懂这样的报告,结果错误?究竟输入了什么,导致的结果错误?
不告诉我这个,我没办法调试我的程序(程序是调试出来的)
我真的不建议你继续跟着这个网站学习,这样只会浪费你的时间
|
|