利用Python/C语言解决分鱼问题
来源:互联网 发布:能装windows的平板 编辑:程序博客网 时间:2024/05/26 22:09
A、B、C、D、E这5个人合伙夜间捕鱼,凌晨时都已经疲惫不堪,于是各自在河边的树丛中找地方睡着了。第二天日上三竿时,A第一个醒来,他将鱼平分为5份,把多余的一条扔回河中,然后拿着自己的一份回家去了;B第二个醒来,但不知道A已经拿走了一份鱼,于是他将剩下的鱼平分为5份,扔掉多余的一条,然后只拿走了自己的一份;接着C、D、E依次醒来,也都按同样的办法分鱼。问这5人至少合伙捕到多少条鱼?每个人醒来后所看到的鱼是多少条?
设总共捕了x条鱼,每个人看到的鱼共有Xn条, 则:
X1=x
X2=(X1-1)/5*4
X3=(X2-1)/5*4
X4=(X3-1)/5*4
X5=(X4-1)/5*4
其中,(Xn-1)%5=0必定成立,即题中所提到的,扔掉一条,取五分之一。
Python:
解决E和D的问题(规模为2),就可以解决D和C的问题,也就是E、D、C的问题(规模为3),最后解决所有问题。
由X(n+1)=(Xn-1)/5*4得,Xn=X(n+1)*5/4+1
C:
Python:
设总共捕了x条鱼,每个人看到的鱼共有Xn条, 则:
X1=x
X2=(X1-1)/5*4
X3=(X2-1)/5*4
X4=(X3-1)/5*4
X5=(X4-1)/5*4
其中,(Xn-1)%5=0必定成立,即题中所提到的,扔掉一条,取五分之一。
那么就有x,使得递推所得到的项满足(Xn-1)%5=0即可。
C:
#include<stdio.h> int fish(int n, int x)//递归函数 { if((x-1)%5 == 0) { if(n == 1) return 1; //递归完成 else return fish(n-1, (x-1)/5*4);//继续递归 } return 0; //所取数值不符合题意,返回main()重新取X } int main() { int i=0, flag=0, x=6; do { x+=5;//x的最小值为6,每次增加5 if(fish(5, x)) { flag=1; //标记为1,使得循环结束 printf("五个人合伙捕到的鱼总数为%d\n", x); } } while(!flag); for (i=1;i<=5;i++){//输出每个人所看到的鱼的数量 printf("第%d个人看到的鱼有%d条\n",i,x); x=(x-1)/5*4; } return 0; }
Python:
def fish(n, x): if (x - 1) % 5 == 0: if n == 1: return 1 else: return fish(n - 1, (x - 1) / 5 * 4) return 0x = 6while True: x += 5 if fish(5, x) == 1: print(x) breakfor i in range(1, 6): print("第{0}人看到的鱼有{1}条".format(i, x)) x = int((x - 1) / 5 * 4)反向递推法:
解决E和D的问题(规模为2),就可以解决D和C的问题,也就是E、D、C的问题(规模为3),最后解决所有问题。
由X(n+1)=(Xn-1)/5*4得,Xn=X(n+1)*5/4+1
C:
#include<stdio.h>int main(){ int fish[5], i; fish[5]=6; while(1) { for(i=4; i>0; i--) { if(fish[i+1]%4!=0) break; fish[i]=fish[i+1]*5/4+1; if(fish[i]%5!=1) break; } if(i == 0) break; fish[5]+=5; } printf("总共有%d条鱼\n",fish[1]); for(i=1; i<=5; i++) printf("第%d个人看到%d条鱼\n", i, fish[i]); return 0;}
Python:
fish = [0, 0, 0, 0, 1]i = 0while True: fish[4] += 5 for i in range(3, -2, -1): if fish[i + 1] % 4 != 0: break fish[i] = int(fish[i + 1] * 5 / 4 + 1) if fish[i] % 5 != 1: break if i==-1: breakprint("总共捕了",fish[0],"条鱼")for i in range(0, 5): print("第{0}人看到{1}条鱼".format(i+1, fish[i]))
阅读全文
0 0
- 利用Python/C语言解决分鱼问题
- C语言递归解决分鱼问题
- C语言:分苹果问题
- 利用C语言解决实际问题
- C语言算法-猴子分桃问题
- 利用分段式深度解决特效重复叠加的问题
- C语言解决随机数问题
- c语言解决汉诺塔问题
- c语言 解决汉诺塔问题
- C++/python解决汉诺塔问题
- 捕鱼分鱼程序 C语言
- Unix编程(二)C语言利用PV原句解决5个经典的进程同步问题
- c语言解决the next permutation 问题
- 用C语言解决迷宫问题
- C语言解决约瑟夫问题算法
- 开灯问题用C语言怎么解决 ?
- C语言解决大数的阶层问题
- c语言 递归解决约瑟夫问题
- https协议简析
- 一种手游中实时战斗系统的设计思路
- Vue与axios整合时,访问Vue实例
- Android 状态选择器的使用
- Linux/Unix IO多路复用之select网络编程基本代码
- 利用Python/C语言解决分鱼问题
- hdu5521(spfa)
- JSP页面选择文件夹显示文件路径
- elasticsearch5.0启动出现的错误
- 关于程序员写文档(网络转载)
- T3非套打凭证间距调整
- Kubernetes1.7新特性:新增自动伸缩条件和参数
- javaFx 从登陆到界面跳转
- mac Xcode安装及使用Git代码管理工具