五人分鱼

这篇博客探讨了一个五人分鱼的问题,其中A到E五人在捕鱼后依次醒来,按照特定规则分配鱼。他们醒来后看到的鱼数量通过递归关系可以推算出来。博主分享了解题思路,包括如何确定最小的初始鱼数,并提到了在编程实现过程中遇到的数据类型和判断条件的问题。此外,还引用了其他大神的不同解法,包括递归和直接计算的方法。
摘要由CSDN通过智能技术生成

五人分鱼问题

问题描述:

A、B、C、D、E这5个人合伙夜间捕鱼,凌晨时都已经疲惫不堪,于是各自在河边的树丛中找地方睡着了。第二天日上三竿时,A第一个醒来,他将鱼平分为5份,把多余的一条扔回河中,然后拿着自己的一份回家去了;B第二个醒来,但不知道A已经拿走了一份鱼,于是他将剩下的鱼平分为5份,扔掉多余的一条,然后只拿走了自己的一份;接着C、D、E依次醒来,也都按同样的办法分鱼。问这5人至少合伙捕到多少条鱼?每个人醒来后所看到的鱼是多少条?

#include "stdio.h"

int main()
{
	int i=0; 	//假定最后一人拿到的鱼
	double num[5],p[5];//num拿走前剩下的数量,p拿走的鱼
	int camp;
	while(1){
		p[0]=i++;//穷举最后一人拿走的鱼
		num[0]=p[0]*5+1;

		int j;
		for(j=1;j<5;j++){

			p[j]=num[j-1]/4;//整型会自动去尾真烦。所以定义了double类型
				camp=p[j];  //目前我想出来的判断是否为整
			num[j]=p[j]*5+1;

			if(p[j]!=camp || num[j-1]>num[j]){
			//printf("p[0]=%d跳出\n",(int)p[0]);//显示循环用
			 break;//如果鱼不为整数或剩下的鱼变多了,跳出
			}
		}
		if(j==5) {
		break;
		}
	}
	
	int j;
	for(j=0;j<5;j++){
	print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值