南师大C:分鱼问题(一)

前言

“递归”不愧是它,总是这么让人烧脑,一次都没令人失望过🙃,这次的题目是五人捕分鱼。和之前做的递归的题目又有点不相同。

正文

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

关键

许多人第一次得出的答案是3960吧,一是没弄清楚递归本体,二是缺少考虑了下一个人分的鱼数n要满足(n-1)/5*4%5==0,也就是下一个数要能被5整除。

代码一

#include <stdio.h>
#include <stdlib.h>
int finish(int n,int x);
void main(){
	int i=0,sum,flag=0;
	do{
		sum=5*i+1;//鱼的总数
		i=i+1;//记次数,无实际意义
		if(finish(5,sum)){
			flag=1;
			printf("五个人合伙捕到的鱼总数为:%d",sum);
		}
	}while(!flag);
} 
/*n为人数,x为鱼的总数*/
int finish(int n,int x){
	if((x-1)%5==0){//次数要能被5整除
		if(n==1)
    	   return 1;//递归出口
        else{
        	return finish(n-1,(x-1)/5*4);
		}
	}
	return 0;//若不满足条件,则返回0
}

代码二

#include<stdio.h>
#include <string.h>
#include <stdlib.h>
int finish(int n,int time);
int main()
{
	int i=0;
	int flag=0;
	while(!flag){
	    i++;
		flag=finish(i*5+1,0);
	}
		printf("%d",i*5+1);
}
/*time 为分鱼次数,n为鱼的数量*/
int finish(int n,int time)
{
	if(time==5){
	//printf("%d",n);
		return 1;
	}
	if((n-1)%5==0){
		return finish((n-1)/5*4,time+1);
	}
	return 0;
}

代码三(非递归)

/*渔夫捕鱼问题C实现*/
#include<stdio.h>
int main(void){
int n,x,flag;
for(n=6;flag;n++){          //由于最后一人最少需要6条鱼,所以循环从6开始*/
	x=n;
int i=0;
while(i<5){                 //总共5人所以判断5次
	if((x-1)%5==0){         //判断该数是否合适
	  flag=0;               
	  x=(x-1)/5*4;          //一人分完后剩余鱼的总数
    }
	else {
		flag=1;             //不合适跳出判断循环,继续下一个数
		break;
	}
	i++;
	}
}
printf("捕到的鱼总量为:%d\n",n);
return 0;
}

源:https://www.cnblogs.com/dennis-wong/p/4121325.html

python编程完成地铁信息管理系统,编写程序: line = "1号线:双港站\孔目湖站\长江路站\珠江路站\庐山南大道站\绿茵路站\卫东站\地铁大厦站\秋水广场站\滕王阁站\万寿宫站\八馆站\八广场站\丁公路北站\师大南路站\彭家桥站\谢家村站\青山湖大道站\高新大道站\艾溪湖西站\艾溪湖东站\太子殿站\奥体中心站\瑶湖西站|\ 2号线:南路站\大岗站\生米站\九龙湖南站\市民中心站\鹰潭街站\国博站\西站南广场站\南昌西站\龙岗站\国体中心站\卧龙山站\岭北站\前湖大道站\学府大道东站\翠苑路站\地铁大厦站\雅苑路站\红谷中大道站\阳明公园站\青山路口站\福州路站\八广场站\永叔路站\丁公路南站\南昌火车站\顺外站\辛家庵站|\ 3号线:银三角北站\斗门站\柏岗站\沥山站\复兴大道东站\邓埠站\八大山人站\施尧站\江铃站\京家山站\十字街站\绳金塔站\六眼井站\八馆站\墩子塘站\青山路口站\上沙沟站\青山湖西站\国威站\火炬广场站\梁万站\京东大道站|\ 4号线:白马山站\裕丰街站\璜溪站\中堡站\礼庄山站\西站南广场站\怀玉山大道站\安丰站\东新站\新洪城大市场站\丁家洲站\观洲站\云天路站\灌婴路站\南昌大桥东站\桃苑站\绳金塔站\坛子口站\丁公路南站\丁公路北站\人民公园站\上沙沟站\起凤路站\七里站\民园路西站\火炬站\北沥站\科技城站\尾洲站" 功能设计: 1. 数据结构: 合理使用列表和字典存储线路和站点信息, 需要用代码将"lines"转换成合理的数据结构(20) 2. 添加线路: 输入线路名称和站点列表,添加新线路。(10) 3. 删除线路: 输入线路名称删除指定线路。(10) 4. 修改站点: 输入线路和站点名称,修改指定线路的站点信息。(10) 5. 查询线路: 输入起始站点和到达站点,展示中途所经历的站点列表,如有换乘需要展示换乘信息,并显示票价 (30) 6. 票价规则: 5站以内2元,10站以内4元,15站以内5元,超过15站按6元计算。
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值