捕鱼分鱼。
代码:
/*头文件*/
#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条鱼?