c语言中用递推法解决渔夫问题,大佬们,帮忙看看哪里出错了!#include <stdio.

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

大佬们,帮忙看看哪里出错了!

#include

#include

int yuesf();

int buyu();

int taozi();

void main()

{

int choice;

while(1)

{

printf("\n\n\n");

printf("****递推法应用****\n");

printf("\n");

printf(" 1.约瑟夫问题\n");

printf(" 2.输出渔夫至少捕到多少条鱼 \n");

printf(" 3.输出猴子第一天摘了多少个桃子\n");

printf(" 0.退出\n");

printf("\n");

printf("*****************************************************\n");

printf("please choice(0-3):");

scanf("%d",&choice);

switch(choice)

{ case 0: exit(0); // 头文件定义 ,结束程序

case 1: // yuesf() ;break;

case 2: // buyu() ;break;

case 3: // taozi();

break;

}

}

}

//约瑟夫问题

int yuesf()

{

int n, m, i, s=0;

system("cls");

printf ("N M = ");

scanf("%d%d", &n, &m);

for (i=2; i<=n; i++)s=(s+m)%i;

printf ("最后的胜利者: %d\n", s+1);

return 0;

}

//输出渔夫至少捕到多少条鱼

int fish(int n, int x)

{

if((x-1)%5 == 0)

{

if(n == 1)

return 1; /*递归出口*/

else

return fish(n-1, (x-1)/5*4); /*递归调用*/

}

return 0; /*x不是符合题意的解,返回0*/

}

int main()

{

int i=0, flag=0, x;

do

{

i=i+1;

x=i*5+1; /*x最小值为6,以后每次增加5*/

if(fish(5, x)) /*将x传入分鱼递归函数进行检验*/

{

flag=1; /*找到第一个符合题意的x则置标志位为1*/

printf("五个人合伙捕到的鱼总数为%d\n", x);

}

}

while(!flag); /*未找到符合题意的x,继续循环,否则退出循环*/

return 0;

}

//输出猴子第一天摘了多少个桃子

int taozi()

{

int peach = 0;//桃子总数

int rest = 1;//第10 天只剩一个桃子

int day = 0;

for(day = 9; day > 0; day--)

{

peach = (rest + 1) * 2;//每天的桃子总数是后一天剩余桃子加1乘2

rest = peach;

}

printf("猴子第一天一共摘了%d个桃子\n",peach);

system("pause");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值