变式 3:递归把十进制转成二进制
十进制转二进制:不断除以 2,余数从最后一个读到第一个。递归正好能把顺序倒过来:先把 n / 2 转好打印出来,再打印 n % 2。 输入正整数 n,输出它的二进制。例如输入 13,输出: 1101 现在打印出来的顺序是反的。
变式 4:递归求数组元素之和
前 n 个元素的和 = 前 n−1 个元素的和 + 第 n 个元素 a[n-1];一个元素都没有(n == 0)时和是 0。 第一行输入 n(1 ≤ n ≤ 100),第二行 n 个整数,输出它们的和。例如输入: 4 5 6 7 8 应该输
二级 · 程序改错:递归求斐波那契
下面程序中,函数 fun 的功能是:用递归求斐波那契数列的第 n 项(第 1、2 项都是 1)。例如输入 6,输出 8。 程序中有两处错误(都能通过编译)。请改正 found 下面一行中的错误,不要改动 main,也不要增删行。
二级 · 选择:递归前后各打印一次
有以下程序,运行后的输出结果是【0】。 #include <stdio.h> void p(int n) { if (n == 0) return; printf("%d",
二级 · 只写 fun:杨辉三角里的组合数
杨辉三角第 n 行第 k 个数(都从 0 数起)就是组合数 C(n, k),它满足: C(n, 0) = C(n, n) = 1(每行两头是 1); 其他位置 C(n, k) = C(n−1, k−1) + C(n−1, k)(等于肩上两个
作品:汉诺塔挑战,要搬多少天
传说有座寺庙里的僧人在搬 64 层的汉诺塔,搬完世界就结束了。我们来算算:如果每秒搬一步、不吃不睡,n 层要搬几步、多少天? 函数 steps(n) 递归求步数:搬 n 层 = 两次搬 n−1 层 + 1 步。输入 n(1 ≤ n ≤ 35
局部变量和全局变量谁说了算
同名时先找最里层;里层没有,才用外面的全局变量 全局 int x = 1; f 里 int x = 5; f 里用 x → 5 main 里用 x → 1 变量定义的位置,决定了它在哪儿能用(作用域): 局部变量:定义在函数里(或一对 {
步数为什么总是 0
输入天数 n 和每天的步数,函数 add 把步数加进全局变量 total,最后输出一周总步数。例如输入 2 3000 4500 应输出 7500。可程序总是输出 0。先运行看画布上每天的全局 total,再删掉一行让它变对。 代码里以 @y
母题:全局变量带回最高分和最低分
函数只能 return 一个值。想一次交出两个结果,可以把结果写进全局变量,main 直接读。 输入人数 n 和 n 个体测成绩,函数 find 把最高分放进全局变量 hi、最低分放进 lo。补全 find。例如输入 4 76 92 58
变式 1:评委打分去掉最高最低
辩论赛评分:去掉一个最高分和一个最低分,剩下的求平均,保留两位小数。 函数 find 已经能带回 hi 和 lo,再让它把总分放进全局变量 sum,然后改 main 里的计算。例如输入 5 8 9 7 10 6 输出 8.00(去掉 10