该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
大佬们,帮忙看看哪里出错了!
#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;
}