聪明的学生C语言实现(栈)

该博客介绍了如何运用递归思想解决‘聪明的学生’问题,通过抽象递归算法,分析问题核心,得出最大数字的学生最先猜出自己数字的规律。文章详细解释了递归函数的构建,并提供了实验代码实现,帮助读者理解递归在解决问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不写初中高级这种实验啦 直接上STL吧 如果有不懂的话可以看看STL容器,我直接给个百度百科的链接吧

聪明的学生(实验名称)
一、实验目的
掌握递归思想,将“聪明的学生”问题抽象出递归并加以实现。

二、实验内容
(1)将“聪明的学生”问题抽象为递归算法。
(2)键盘输入三个数字,要求输出谁能猜出,并输出递归过程的中间数据。 (3)给出测试用例:3,8,5 的输出结果。

三、提示参考
提示 1:总是帖着最大数的那个人猜出了自己头上的数。
提示 2:将“聪明的学生”问题抽象为递归思想,特别注意递归程序的两个 方面是递归出口和迭代步骤。
问题分析:依题可知,每个学生都能知道其他另外两个学生的数字,但不清楚自己数字。假设,我们以 1,2,3,作为例子来分析。A 只有两种情况,一种是(21),另外一种是(2+1),但是 A 自己不能确定是哪一种情况,所以 A 猜不出来。 再来看看 B,两种情况是(1+3)或者(3-1),但是 B 仍然不能确定,最后是 C, 两种情况是(1+2)或者(2-1),但是 C 是可以排除(2-1)这种情况的,因为如 果 C 是(2-1),那么 B 是在看到 A 是 1,C 是 1 的情况下,B 可以猜出来自己是 2,但是 B 没有猜出来,故而 C 可以排除是( 2-1)这种情况,因而 C 只能是( 2+1), 也就是 3。可以分析总结出最大的数字总会最先猜出来,是因为只有最大的数字 是可以排除相减的情况的,因为如果它是相减得到的话,前面一定有人可以猜出 来。 现在,我们将问题抽象。即 A,B,C 三个学生,他们头上的数字分别为 x1,x2,x3。 从上述结论可知,最大的数总会被最先猜出来。不妨假设,B 是最先猜出来的学 生,即 x2 = x1+x3.而 B 能排除|x1-x3|这种可能性的依据有两个,一是 x1=x3,那 么 B 只能是 x1+x3,因为三个都是正整数。另外一种依据是假设在 x2=|x1-x3|的 前提下,那么在前面的提问中,A 或者 C 已经先猜出来了,而因为他们没有猜

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值