五人分椰子问题
来源:互联网 发布:淘宝懒人鞋阿迪 编辑:程序博客网 时间:2024/04/27 23:02
链接:https://www.nowcoder.com/questionTerminal/5ccede9ae50b465c8c3283038d9a4a48
来源:牛客网
来源:牛客网
话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有棵椰子树,还有一只猴子! 大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先. 晚上某个家伙悄悄的起床,悄悄的将椰子分成5份,结果发现多一个椰子,顺手就给了幸运的猴子,然后又悄悄的藏了一份,然后把剩下的椰子混在一起放回原处,最后还是悄悄滴回去睡觉了. 过了会儿,另一个家伙也悄悄的起床,悄悄的将剩下的椰子分成5份,结果发现多一个椰子,顺手就又给了幸运的猴子,然后又悄悄滴藏了一份,把剩下的椰子混在一起放回原处,最后还是悄悄滴回去睡觉了. 又过了一会 ... ... 又过了一会 ... 总之5个家伙都起床过,都做了一样的事情 早上大家都起床,各自心怀鬼胎的分椰子了,这个猴子还真不是一般的幸运,因为这次把椰子分成5分后居然还是多一个椰子,只好又给它了。 问题来了,问这堆椰子最少有多少个?
这是牛客网上面的一道智力题,很多人给出了答案,有人直接理论说明,有人用编程的方式解决了,但是没有给出注释。在这里,我参照其中一段代码,按照自己的理解做一些必要的说明。
#include<stdio.h>#include<stdlib.h>#define MAX 10000 //假设最后每人分到的椰子最多为10000个 int num=0;//作为全局变量,用于记录最后总的椰子数 //定义函数solve,来从最后每人分到的椰子数入手,递推出一开始总的椰子数 //其中参数就是每人最后分到的实际的椰子数,显然该值最小为1,因为不可能最后一个椰子也没分到呀!//返回值就是一个bool值,如果为真,说明输入的最小值可以满足题目的要求,如果为假则说明不满足要求,需要重新输入 bool solve(int index){ int res=index*5; //最后每个人的椰子数乘以5再加1 ,即 (res+1)表示五个人最后要分的椰子,也可以说 for(int i=0;i<5;i++){ //成是五个人第五次分之前剩下的椰子总数 if((res+1)%4){//显然,这个总数应该是第四次分完之后剩下的那些椰子,也就是说这些椰子应该可以被 return false; //4整除,因为这是第四个人分完五份之后(给了猴子一个)取走自己的那一份剩下的四份 } //所以理所当然可以被4整除,如果不能整除,说明输入的值index不是要求的值,所以需要重新 res=(res+1)*5/4; // 输入,当满足被4整除的要求后,就开始计算第四次分之前的椰子总数(此时还应加上给猴子的一个),也就是语句 } //res=(res+1)*5/4;然后一直连续循环5次即可找到第一次分之前的椰子总数,其实最后应该是(res+1)*5/5 num=res+1; return true;}int main(){ for(int i=1;i<=MAX;i++){ if(solve(i)){ printf("%d\n",num); break; } } return 0;}
0 0
- 五人分椰子问题
- 水手分椰子问题
- 人、猴子、椰子问题
- 水手分椰子问题
- 人和猴子分配椰子问题
- n个水手分椰子问题 (递推)
- 吃椰子记
- 椰子好吃口难开
- 命令与征服和放养椰子
- SailorSubCoconut水手分椰子
- 鳄鱼和椰子
- 水手分椰子
- 海盗分椰子吃
- bzoj3597方伯伯运椰子
- 一个朋友椰子 blog上的文章
- 在C#中操作XML(椰子林)
- 袖珍椰子的栽培及养护
- [创新杯]分椰子啥的.....
- c文件读写
- jquery组件WebUploader文件上传用法详解
- 1118. Birds in Forest
- Spring property文件配置方法以及如何与工程分离
- C++开发面试题
- 五人分椰子问题
- AdMob Mediation
- Java之RTTI机制的原理
- 1119. Pre- and Post-order Traversals
- 爬虫-漫画喵的100行逆袭
- group by 多个字段
- js 输出
- 循环读取XML
- leetcode_middle_56_240. Search a 2D Matrix II