zoukankan      html  css  js  c++  java
  • 网易云课堂_程序设计入门-C语言_第六章:数组_1多项式加法

    1
    多项式加法(5分)

    题目内容:

    一个多项式可以表达为x的各次幂与系数乘积的和,比如:

    现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。

    程序要处理的幂最大为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 main()
      3 {
      4     int a[101][2], b[101][2], c[101][2];
      5     int i, j, m, n, cnt = 0;
      6     
      7     for (i = 0; i < 101; i++)        /* a表清零 */
      8     {
      9         for (j = 0; j < 2; j++)
     10         {
     11             a[i][j] = 0;
     12         }
     13     }
     14 
     15     for (i = 0; i < 101; i++)        /* b表清零 */
     16     {
     17         for (j = 0; j < 2; j++)
     18         {
     19             b[i][j] = 0;
     20         }
     21     }
     22 
     23     for (i = 0; i < 101; i++)        /* c表清零 */
     24     {
     25         for (j = 0; j < 2; j++)
     26         {
     27             c[i][j] = 0;
     28         }
     29     }
     30 
     31     do {
     32         scanf("%d %d", &m, &n);
     33         a[m][0] = m;
     34         c[m][0] = m;
     35         a[m][1] = n;
     36     } while (m != 0);        /* 输入a表,输入c表的第0列幂,不输入c表的第1列系数 */
     37 
     38     do {
     39         scanf("%d %d", &m, &n);
     40         b[m][0] = m;
     41         c[m][0] = m;
     42         b[m][1] = n;
     43     } while (m != 0);        /* 输入b表,输入c表的第0列幂,不输入c表的第1列系数 */
     44 
     45     for (i = 0, j = 1; i < 101; i++)        /* 统计c表的第1列系数 */
     46     {
     47         c[i][1] = a[i][1] + b[i][1];
     48     }
     49 
     50     for (i = 100; i > 1; i--)        /* 从c表的第100行开始循环,一直到第2行 */
     51     {
     52         if (c[i][1] != 0)        /* 只统计c表第1列系数不为0 */
     53         {
     54             if (c[i][1] == 1)        /* 如果c表第1列系数==1,比如40 1 */
     55             {
     56                 if (cnt > 0)                /* 如果输出超过一次,记得前面加正号+ */
     57                 {
     58                     printf("+");
     59                 }
     60                 printf("x%d", c[i][0]);        /* 输出x40 */
     61             }
     62             else if (c[i][1] == -1)        /* 如果c表第1列系数==-1,比如40 -1 */
     63             {
     64                 printf("-x%d", c[i][0]);        /* 前面加负号-,系数-1省略,输出-x40 */
     65             }
     66             else        /* 其他情况,c表第1列系数不等于1,也不等于-1 */
     67             {
     68                 if (c[i][1] < 0)
     69                 {
     70                     printf("%dx%d", c[i][1], c[i][0]);        /* 系数小于0,直接输出 */
     71                 }
     72                 else
     73                 {
     74                     if (cnt > 0)
     75                     {
     76                         printf("+");        /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */
     77                     }
     78                     printf("%dx%d", c[i][1], c[i][0]);
     79                 }
     80             }
     81             cnt++;
     82         }
     83     }
     84 
     85     if (c[1][1] != 0)        /* c表第1行第1列系数不等于0 */
     86     {
     87         {
     88             if (c[1][1] == 1)        /* 如果c表第1列系数==1 */
     89             {
     90                 if (cnt > 0)
     91                 {
     92                     printf("+");        /* 如果输出超过一次,记得前面加正号+ */
     93                 }
     94                 printf("x");
     95             }
     96             else if (c[1][1] == -1)        /* 如果c表第1列系数==-1 */
     97             {
     98                 printf("-x");
     99             }
    100             else
    101             {
    102                 if (a[1][1] > 0 && cnt > 0)        /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */
    103                 {
    104                     printf("+");        /* 如果输出超过一次,记得前面加正号+ */
    105                 }
    106                 printf("%dx", c[1][1]);
    107             }
    108             cnt++;
    109         }
    110     }
    111 
    112     if (c[0][1] != 0)
    113     {
    114         if (cnt > 0)
    115         {
    116             printf("+");        /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */
    117         }
    118         printf("%d", c[0][1]);
    119         cnt++;
    120     }
    121 
    122     if (cnt == 0)
    123     {
    124         printf("0");
    125     }
    126 }
  • 相关阅读:
    web3g163(网易)邮箱和博客数据架构设计
    webQQ(腾讯)EmailTMessage(腾讯微博记事本)
    ASP.net MVC 4 中Security.FormsAuthentication验证用户的状态(匿名|已登录)
    ASP.net:查找框设默认
    webQQ(腾讯)EMailQQMsg(仿QQ短信)数据库设计
    webQQ(腾讯)QZone仿QQ投票和测试程序数据库设计
    ASP.NET MVC 3 RTM
    【技术贴】Eclipse||Myeclipse tab缩进转换为空格教程
    【技术贴】解决Eclipse启动不了,一闪而过的问题
    【技术贴】解决U盘无法复制:磁盘被写保护,请去掉写保护或使用另一张磁盘。
  • 原文地址:https://www.cnblogs.com/denggelin/p/5413088.html
Copyright © 2011-2022 走看看