万俟岚 2017-11-08 09:11 采纳率: 100%
浏览 1192
已采纳

关于C中二维数组的一个问题。。。【跪

这里是问题↓
题目内容:
一个多项式可以表达为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

我试了几个例子 都能符合题意。。但是它老说我答案错误 哭QWQ

这里放上来的代码老是掉东西 我放在下面评论了QWQ 大佬们别走!!

  • 写回答

2条回答 默认 最新

  • 万俟岚 2017-11-08 09:56
    关注

    #include
    int main()
    {
    int a[100][2]; //第一个多项式
    int b[100][2]; //第二个多项式
    int i, j, al, bl;

    for (i = 0;; i++)//输入第一个多项式
    {
        for (j = 0; j<2; j++)
        {
            scanf("%d", &a[i][j]);
        }
        if (a[i][0] == 0)
            break;
    }
    
    al = i + 1;//第一个多项式总项数
    
    for (i = 0;; i++)//输入第二个多项式
    {
        for (j = 0; j<2; j++)
        {
            scanf("%d", &b[i][j]);
        }
        if (b[i][0] == 0)
            break;
    }
    
    bl = i + 1;//第二个多项式总项数
    
    for (i = 0; i<al; i++)//同幂次项数相加,存放在第一个多项式中
    {
        for (j = 0; j<bl; j++)
        {
            if (a[i][0] == b[j][0])
            {
                a[i][1] += b[j][1];
                b[j][0] = -1;
                break;
            }
        }
    }
    
    for (i = 0; i<bl; i++)//将第二个多项式中有的而第一个多项式中没有的项添加到第一个多项式中
    {
        if (b[i][0] != -1)
        {
            a[al][0] = b[i][0];
            a[al][1] = b[i][1];
            al++;//总项数改变
        }
    }
    
    for (i = 0; i<al; i++)//选择排序法,将幂次从大到小排列
    {
        for (j = i + 1; j<al; j++)
        {
            if (a[i][0]<a[j][0])
            {
                int t;
                t = a[i][0];
                a[i][0] = a[j][0];
                a[j][0] = t;
                t = a[i][1];
                a[i][1] = a[j][1];
                a[j][1] = t;
            }
        }
    }
    
    int flag = 1;
    for (i = 0; i<al; i++)//输出形如ax2+bx+c的答案
    {
        if (a[i][1] != 0)//输出系数不为0的项
        {
            flag = 0;
            printf("%d", a[i][1]);
            if (i < al - 1)//最后一项的幂次一定为0,因此只输出倒数第二项及之前的项所带的x
            {
                if (a[i][0] != 1)
                    printf("x%d", a[i][0]);//幂次不为1的项输出其幂次
                else
                    printf("x");//幂次为1的项不输出幂次,即不输出1
                if (a[i + 1][1] > 0)
                    printf("+");//下一个项为正数时输出加号(下一个项为负数时自带负号,因此不考虑负号)
            }
        }
    }
    if (flag)
        printf("0");//所有系数都为0时输出0
    printf("\n");
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!