Re: [问题] 九九乘法表不用循环是叫我直接从1列到81?

楼主: jserv (松鼠)   2018-07-21 02:21:42
※ 引述《red0whale (red whale)》之铭言:
: 刚才做题目,
: https://i.imgur.com/NI4TYj5.jpg
: 不用循环叫我列九九乘法表是哪招?
: 说实在我真想不到不用循环就能简单列出九九乘法表的方法了
不用 iteration,就用 recursion,顺便预测出题者还不准你用乘法操作。
这里提供一份实作程式码:
#include <stdio.h>
int mul(int x, int y) {
if (!x || !y) return 0;
return x + mul(x, y - 1);
}
void table_row(int x, int y) {
if (y > 1) table_row(x, y - 1);
printf("%d x %d = %2d | ", x, y, mul(x, y));
}
void mult_table(int x, int y) {
if (x > 1) mult_table(x - 1, y);
table_row(x, y);
printf("\n");
}
int main() {
mult_table(9, 9);
return 0;
}
参考输出:
1 x 1 = 1 | 1 x 2 = 2 | 1 x 3 = 3 | 1 x 4 = 4 | 1 x 5 = 5 ...
2 x 1 = 2 | 2 x 2 = 4 | 2 x 3 = 6 | 2 x 4 = 8 | 2 x 5 = 10 ...
3 x 1 = 3 | 3 x 2 = 6 | 3 x 3 = 9 | 3 x 4 = 12 | 3 x 5 = 15 ...
...
9 x 1 = 9 | 9 x 2 = 18 | 9 x 3 = 27 | 9 x 4 = 36 | 9 x 5 = 45 ...
乍看可满足题目要求,不过仍有大量改进空间:
1. 乘法实作可避免大量重复的加法;
2. 九九乘法中 3 * 8 和 8 * 3 的输出数值相等,这类运算也可避免;
3. 实作用到三个递回函式,可缩减;
4. if (x > 1) 和 if (y > 1) 这类比较也可缩减次数,甚至免去比较
(美妙的 bitwise 操作);
5. 改善输出的排版;
我想将上述改进项目丢给学生当作业 (*笑*)
作者: oiu850714 (oiu)   2018-07-21 07:29:00
神来惹
作者: cutekid (可爱小孩子)   2018-07-21 07:46:00
推唷
作者: cphe (魔鬼藏在垃圾筒里)   2018-07-21 09:04:00
神来了~~~
作者: sarafciel (Cattuz)   2018-07-21 09:09:00
野生的jserv出现了!
作者: lc85301 (pomelocandy)   2018-07-21 09:59:00
原来是答题呀,我还以为在出作业呢(X
作者: a29022792 (我猫厨我骄傲)   2018-07-21 10:05:00
作者: raagi (ㄌㄐ)   2018-07-21 11:10:00
幸好我修过啦……(咦?
作者: TitanEric (泰坦)   2018-07-21 11:59:00
跪着读这篇
作者: Sidney0503 (Sidney0503)   2018-07-21 12:49:00
老师来出题目了XD
作者: mmmmei (mmm煤)   2018-07-21 23:11:00
动态规划会不会比较好?
作者: alan23273850   2018-07-22 12:53:00
看到关键字 美妙,bitwise,作业 就知道大神驾到larr
作者: zerosaint (大头)   2018-07-23 00:18:00
有大神就给推
作者: xvid (DivX)   2018-07-23 09:35:00
作者: liflguy (xxxwino)   2018-07-29 18:09:00
<(—_—)>

Links booklink

Contact Us: admin [ a t ] ucptt.com