2 qq 34951822 qq_34951822 于 2016.05.10 20:38 提问

C 分鱼问题 编译无错 运行无结果

#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;

}

2个回答

YXTS122
YXTS122   2016.05.10 21:18

这代码我看着好像可以运行,不知道你的原题是什么,能说下吗

qq423399099
qq423399099   Ds   Rxr 2016.05.10 21:27

主要有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;

}//这里递归的作用是作为判断条件
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!