本文目录一览:
- 1、C语言函数递归解决分鱼问题
- 2、用C语言的递归解决分鱼问题
- 3、C程序,三个人钓鱼分鱼问题
- 4、C语言递归解决分鱼问题
- 5、c语言,平分七筐鱼 甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐.
C语言函数递归解决分鱼问题
E拿鱼前至少有6
D拿鱼前至少有5*6+1
以此类推
int Fish(int n)
{ if (n==0)
return 1;
else
return 5*Fish(n-1)+1;
}
main函数调用Fish(5)
用C语言的递归解决分鱼问题
下面代码是我自己写的,看别人代码比较累,所以如果楼主愿意,可以看看下面的代码,我会尽量讲解细致一点。
#include stdio.h
//sub(manth,fishleft)参数意义:manth表示第几个人分鱼,fishleft表示他分鱼时获得了多少鱼
//函数的返回结果是第manth个人分鱼时剩余的条数,如manth = 5,fishleft = 1,则表示一共捕获了3906条鱼。
int sub(int manth,int fishleft){
if(manth == 1){
fishleft = (5*fishleft +1);
printf("manth = %d,fishleft = %d\n",manth,fishleft);
return fishleft;
}
fishleft = 5*sub(--manth,fishleft)+1;
printf("manth = %d,fishleft = %d\n",manth+1,fishleft);
return fishleft;
}
int main(void){
int manth = 5;
int fishleft = 1;
printf("%d\n",sub(5,1));
return 0;
}
//我得到的结果和楼主所给程序运行结果不一致!楼主可以自己计算,如果最后一个人得到的是1条鱼,则他分鱼时应该剩余6条,manth = 2时应该剩余6*5+1 = 31条,manth = 3时,应该剩余31*5+1条,最后manth= 5,也就是分鱼开始的时候,应该剩余3906条鱼。
//楼主可以用自己的程序测试,当调用sub(2)时得到的是21,而不是31,就能证明该程序应该是用问题的。
C程序,三个人钓鱼分鱼问题
fish number min is 25.
#include stdio.h
/*
甲先醒来,他将鱼篓中的鱼平均分成3分,发现多一条,就将多的这条扔回河里,拿着其中一份回家了,乙醒来,他将鱼篓中的鱼平均分成3分,
发现多一条,就将多的这条扔回河里,拿着其中一份回家了,丙醒来,他将鱼篓中的鱼平均分成3分,发现多一条,就将多的这条扔回河里,拿
着其中一份回家了,这三个人至少钓到了多少鱼?用C程序语言编译,拜托帮帮忙了
x % 3 == 1
(x -1 )*2/3 % 3 == 1
( (x -1 )*2/3 - 1)*2/3 % 3 ==1
fish number min is 25.
甲 8条 剩 16条
乙 5条 剩 10条
丙 3条
*/
int main()
{
int i;
for( i = 4;;++i)
{
if( (i % 3) == 1 ((( i-1)*2/3) % 3) ==1 ((((( i-1)*2/3)-1)*2/3) % 3) == 1)
{
printf("fish number min is %d.\n",i);
break;
}
}
exit(0);
}
C语言递归解决分鱼问题
#include stdio.h
#include stdlib.h
int fish(int n, int x);
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i=0, flag = 0, x;
do{
i=i+1;
x=i*5+1;
if(fish(5,x))//递归判断
{
flag = 1;
//flag标识
printf("五个人合伙捕到的鱼总数是%d\n", x);
}
}while(!flag);
return 0;
}
int fish(int n, int x)//x表示人数,x表示醒来后剩下的鱼
{
if(x%5==1)
{
if(n==1)
return 1;
else
return fish(n-1, (x-1)/5*4);
}
return 0;
}//这里递归的作用是作为判断条件
c语言,平分七筐鱼 甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐.
根据提议可知:每个人应分到7个箩筐,每人各3.5筐鱼。采用3*3数组来表示三个人分到的东西。
数组的每行每列元素之和都是7;
数组行: 满筐 + 半筐 = 3.5筐;
每个人所得满筐数不会超过3筐;
每个人至少有1个半筐;
class Program
{
static void Main(string[] args)
{
int[,] fishermen = new int[3, 3];
for (int m = 1; m = 3; m++) //A
{
fishermen[0, 0] = m;
fishermen[0, 1] = (int)((3.5 - (double)m) / 0.5);
fishermen[0, 2] = 7 - fishermen[0, 1] - fishermen[0, 0];
for (int n = 1; n = 3; n++) //B
{
if (n m)
continue;
fishermen[1, 0] = n;
fishermen[1, 1] = (int)((3.5 - (double)n) / 0.5);
if (fishermen[1, 1] 0)
break;
fishermen[1, 2] = 7 - fishermen[1, 1] - fishermen[1, 0];
for (int j = 1; j = 3; j++) //C
{
if (j n || j + n + m != 7)
continue;
fishermen[2, 0] = j;
fishermen[2, 1] = (int)((3.5 - (double)j) / 0.5);
if (fishermen[2, 1] 0)
break;
fishermen[2, 2] = 7 - fishermen[2, 1] - fishermen[2, 0];
if (fishermen[2, 1] + fishermen[1, 1] + fishermen[0, 1] == 7
fishermen[2, 0] + fishermen[1, 0] + fishermen[0, 0] == 7)
{
for (int i = 0; i 3; i++)
{
Console.WriteLine(i + ":" + fishermen[i, 0] + " " + fishermen[i, 1] + " " + fishermen[i, 2]);
}
Console.WriteLine("----------------------------------");
break;
}
}
}
}
}
}