当前位置: 首页 > 工具软件 > 鱼了个鱼 > 使用案例 >

算法:捕鱼分鱼

燕光熙
2023-12-01

捕鱼分鱼。

 

代码:

/*头文件*/
#include <stdio.h>
/*主函数*/
int main(void)
{
	/*代表A,B,C,D,E四个人*/
	char ABCDE;
	/*
	sum=1,代表鱼从第一条开始,用以穷举
	temp,每次循环保存sum的值,以防止改变sum值
	a,为计数器,记录每次的鱼有多少次满足题目要求,如果为5次,那么说明这是一个答案 
	*/
	int sum=1,temp,a;
	/*循环,穷举*/
	while(sum)
	{
		/*a为计数器,每次鱼的数目不同,每新的一次循环,a的值赋值为0*/
		a=0;
		/*用temp保存sum的值,以防止改变sum的值,从而用temp进入另一个循环,求倒底合不合题目要求*/
		temp=sum;
		/*另一个循环,求鱼合不合题目要求*/
		for(ABCDE='A';ABCDE<='E';ABCDE++)
		{
			/*如果(temp-1)%5==0,说明符合题目要求,然后计数器a自增1,将temp变为余下的鱼*/
			if((temp-1)%5==0)
			{
				/*计数器自增1*/
				a++;
				/*分鱼,先减1,然后再除以5,因为上面题目符合要求,所以此处可以除尽*/
				temp=(temp-1)/5;
				/*temp=temp*4,这里是将temp等于分完鱼后拿走了一些剩下的鱼,也就是5份拿走了一份,所以就乘以4*/
				temp*=4;
			}
		}
		/*判断a是否等于5,如果等于,说明上面循环里的if语句条件都成立,也就说明那循环的5次每次都符合题目要求*/
		if(a==5)
			/*如果成立,说明这是一个答案,那么我们就跳出这个循环*/
			break;
		/*如果上面if条件不成立,那我们就将sum这个鱼的数量自增1,进行下一次判断*/
		sum++;
	}
	/*跳出循环后,就把题目解sum打印*/
	printf("%d",sum);
}
/*过程*/
/*
A:3121条 (3121-1)/5=624 剩2496条
B:2496条 (2496-1)/5=499 剩1996条 
C:1996条 (1996-1)/5=399 剩1596条
D:1596条 (1596-1)/5=319 剩1276条
E:1276条 (1276-1)/5=255 剩1020条 
*/

 

题目:
A,B,C,D,E五人在某天夜里合伙去捕鱼, 第二天凌晨时都已疲惫不堪,于是各自找地方睡觉。
日上三杆
A第一个醒来,他将鱼分成五份,把多余的一条鱼扔掉,拿走自己的一份;
B第二个醒来,也将鱼分成五份,把多余的一条鱼扔掉,拿走自己的一份;
C,D,E依次醒来,也同样这样做 。
问他们合伙捕了多少条鱼?

 

思路都在注释里了。
如果不懂可以留言。

 

同时对题目抱有怀疑的心态。
5个人几个小时就打了3121条鱼?

 类似资料: