海滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子凭据分为五份,多了一个, 这只猴子把多的一个扔入海中, 拿走了一份。 第二只猴子把剩下的 桃子又平均分成五份, 又多了一个,它同样把多的一个扔入

核心思想就是 num = (num-1)*(4/5),num要连续5次满足这个式子还是是整数,就是最小数量

#include<stdio.h>
/**
		 *  猴子分桃子 , 树林里有一堆桃子 , 
		 *  第一个猴子过来之后 扔到一个桃子 , 然后把桃子平均分成5份 , 自己拿走一份
			第二个猴子过来 扔到一个桃子  , 把桃子平均分成5份  , 自己拿走一个份
			第三个 第四个 第五个猴子都这么做 ...
			请问 树林里的桃子最少要有多少个  ?
			
			3121
			3121-1 / 5 * 4 = 2496
			2496 -1 /5 *4 = 1996
			1996 -1 / 5 *4 = 1596
			1596 -1 / 5*4 = 1276
			1276 - 1/ 5*4 = 1020
		*/


#include<stdio.h>

int main(){
	
	for (int i = 6;; i++) {
			int sum = i; 
			for (int j = 0; j < 5; j++) {
				if( sum % 5 != 1){      //不满足总数除以5余1的条件不是桃子的数量 
					break;
				}
				printf("sum=%d\n",sum);
				sum = (sum-1) / 5 * 4;  //总数减去1,剩余4/5 
				if( j == 4){
					printf("桃子数为: %d ",i);
					return 0;
				}
			}
	}
}
#include<stdio.h>

int IsNumber(int num) {
	int i = 0;
	while(i<5){
		//只有正确的桃子数i才会累加到5,返回true
		//反之不正常时,要么直接执行else,要么先执行1到3次if再执行else返回false
		if((num-1)%5==0){
			//(num-1)/5是每个猴子拿走的桃子,-1是每个猴子扔到海里的
//			num = num-(num-1)/5-1;				//减去-1后,分成五份,再减去被扔进海里的1个      (num-1) - (num-1)/5 = (num-1)*(1-1/5)=(num-1)*4/5
			num = (num-1)*4/5;  				//num-1 后分成5份,一份被拿走了;剩余四份 
			i++;
		}else
			return 0;
		}
		return 1;
}

int main(){
	//假设每个猴子拿走1个,加上每个猴子仍在海里的1个,
	//剩下的4个,所以从14开始,其实好多开始不重要
	int num = 14;
	while(true){
	//执行方法IsNumber()查看桃子数是否符合要求
		if(IsNumber(num)){
			break;
		}
		num++;//桃子数不合适加1
	}
	printf("%d ",num);
	
}

参考:
https://blog.csdn.net/qq_37865067/article/details/86629875?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值