万俟岚 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条)

报告相同问题?

悬赏问题

  • ¥15 数据库获取信息反馈出错,直接查询了ref字段并且还使用了User文档的_id而不是自己的
  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题
  • ¥15 之前删了盘从下vs2022遇见这个问题 搞了一整天了
  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)