#include
#include
int main()
{
int i,n,x,flag=1;
for(n=6;flag;n++)
{
for(i=0,x=n;flag&&i<5;i++)
{
if(!(x-1)%5)
x=5*x/4+1;
else flag=0;
}
if(!flag)
flag=1;
else break;
}
printf("至少捕到%d条鱼。\n",x);
system("pause");
return 0;
}
这代码我看着好像可以运行,不知道你的原题是什么,能说下吗
主要有3个问题:
1.if(!(x-1)%5)要改成if(!((x-1)%5)) 前面那种写法的话先计算x-1的值,然后直接取反,而不是取5的余数再取反
2.x=5*x/4+1;改成x=4*(x-1)/5;
3.printf输出的应该是n而不是x
#include <iostream>
using namespace std;
int main()
{
int i,n,x,flag=1;
for(n=6;flag;n++)
{
for(i=0,x=n;flag&&i<5;i++)
{
if(!((x-1)%5))
x=4*(x-1)/5;
else flag=0;
}
if(!flag)
flag=1;
else break;
}
printf("至少捕到%d条鱼。\n",n);
system("pause");
return 0;
}
下面再附上一个递归用法:
#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;
}//这里递归的作用是作为判断条件