本文目錄一覽:
- 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;
}
}
}
}
}
}
原創文章,作者:TQWX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135830.html