关于多数组连续交错比相等问题的一点思考

一道之前未完成的 关于数组的编程题:
题目:
输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:
2×6+3X5+12×3-6K+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


前期思路:
  • 由于程序要处理的幂最大是100,因此要用数组存储如此多的变量;
  • 由于输入的数据由很多行组成,有两种方案:一是每次读一行,处理;一是每次读完所有数据,存储到数组中,再处理。显然后者更好。
  • 由于输入中“第一行一定是最高幂,最后一行一定是0次幂”,因此取“a[i]!=0”,为终止读值条件;
  • 输入的数据中有两列,因此用两大类数组分别存储,;考虑到前后两段多项式,因此用“int a[100],b[100],c[100],d[100];”存储两段多项式的幂次和系数;用“a[i],b[i]”捆绑每一行输入的数据。
到此为止准备工作完成,数据读入完毕。



多数组连续交错比相等:

下面要做的是将两大类数组中幂次相等者系数相加,再按规定输出,需要注意的是:一次幂的“1”省略,零次幂的“0”和“x"都省略,各项之间有+号连接。

关于多数组连续交错比相等,一开始采用了这样的方案:

  • 前段多项式的幂次放在外循环,让后段多项式的幂次依次去比较,相等相加,输出结果。
但这种方案存在问题:
 一是输入的幂次不一定按顺序排列,只是 第一行一定是最高幂,最后一行一定是0次幂,这样会造成输出的结果幂次从左到右不是依次降低的;
  二是当前段多项式的幂次间断分布时,可能中间漏掉的幂次后端中有,这样输出结果就漏项;

考虑到幂次从最高到最低,无论中间有没有缺项和是否乱序,我们都可以让多项式的幂次去和依次减小的幂次变量比较,若相等,把系数存放到求和存储器中,输出;
需要注意的一个细节是:每一轮循环后,都需要把求和存储器归零。

因此有了下面的方案:
  • 取一变量,以数组中第一个元素a[0]赋初值,依次递减;让各幂次数组与该变量比较,若相等,存放于求和存储器中,一轮循环最后,输出;
程序 如下:

结语:

从这道题中可以看出,算法的形成需要考虑到方方面面,同一个问题也有多种算法,不应该拘泥于一个。当然上述的算法也还可以改进,欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值