借钱风云

benTuTuT缺钱花了,就开始找他的兄弟借钱。
根据与benTuTuT关系的亲密程度,将n-1个兄弟划分为1-n-1(无重复),第n个人为benTuTuT,这个关系表里的每一个人x,都和x-1与x-2关系最好,
于是benTuTuT开始向n-1和n-2号兄弟借钱(他先向n-1号兄弟借钱,兄弟n-1回复没钱后,他再向n-2号兄弟借钱)。
虽然benTuTuT的兄弟和他平时玩得挺好的,但一说到钱,兄弟们便表面了起来,但是他们也不好直接拒绝,于是假装
自己没钱,开始向和他最亲密的两个兄弟开始借钱。
于是
当n-1号兄弟被找借钱后他会找n-2号兄弟借钱,n-2号兄弟回复没钱后,他再找n-3号兄弟借钱,如果还是没钱,他就会回复找他借钱的人"I don’t have money"。
当n-2号兄弟被找借钱后他会找n-3号兄弟借钱,n-3号兄弟回复没钱后,他再找n-4号兄弟借钱,如果还是没钱,他就会回复找他借钱的人"I don’t have money"。

当2号兄弟被找借钱后他会找1号兄弟借钱,如果还是没钱,他就会回复找他借钱的人"I don’t have money"。
当1号兄弟被找借钱后,由于与benTuTuT的关系较为疏远,所以他会直接回复"I don’t have money"。

PS:如果你还看不懂,请参照样例和最后的样例解释
输入描述:
第一行输入一个整数t,代表有t组测试数据,
对于每组测试数据,输入一个n代表benTuTuT一共有n-1个兄弟
1<=t<=10 2<=n<=10
输出描述:
对于每组测试数据
输出对应的说话顺序,如样例所示
并且每两组测试数据之间应该存在一行空行

示例1

输入
2
3
4

输出
Brother 1:I don’t have money
Brother 2:I don’t have money
Brother 1:I don’t have money

Brother 1:I don’t have money
Brother 2:I don’t have money
Brother 1:I don’t have money
Brother 3:I don’t have money
Brother 1:I don’t have money
Brother 2:I don’t have money

#include<stdio.h>
void lend(int n);
void put(int i); 
int main()
{
	int n;
	scanf("%d",&n);
	lend(n-1);
}
void lend(int n)	//对第一好的兄弟借钱 
{
	if(n==1)
	{
		put(n);
	}
	else
	{
		lend(n-1);	//对第二好的兄弟借钱的结果 
		put(n);		//第一好的兄弟没有钱 
		lend(n-1);	//对第二好的兄弟借钱的结果 
	}
}
/*对运算结果分析发现,对n个人的结果为两个n-1的结果夹一个brother n,
再发现汉诺塔的结果与该题的结果相识,可以借助汉诺塔的递归函数*/ 
void put(int i)
{
	printf("Brother %d:I don't have money\n",i);
}

总结:
1.以正常方法难以解决一个问题时,可以观察它的答案,以数学归纳法归纳出答案的规律以解答。
2.设计一个函数时,如果过程难以解决,可以重点关注其函数作用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值