| 
 
| 老师给的答案和我自己弄得  不太一样不太懂复制代码#include <stdio.h> 
int leastFishNum(){
    
    int totalFishNum = 0; //我们要试探进行所以需要一个变量假定捕鱼的总数量数量
    //从6条鱼开始试探,
    for (totalFishNum = 6; 1; totalFishNum++) {
        int flag = 1;  //我们还需要一个标记,如果我们试探出了一个合理的数字,用它来结束循环
        //5个人一共分配了5次
        //我们把试探的值赋值给鱼的总量totalFishNum
        int leftFishNum = totalFishNum; //定义一个变量记录每次分鱼后剩下的条数,第一次分为捕鱼的数量
        for (int i = 1; i <= 5; i++) {
            
            //如果鱼的总数量减去1一定能被5整除
            if ((leftFishNum - 1) % 5 == 0)//满足if条件说明第一次分配完成
            {
                //经过了第一次分配,A拿走了它的那份
                //后面每一次分配都是,拿走第一份剩余四份
                //那么剩余的鱼 总数应该是
                leftFishNum = 4 * (leftFishNum - 1) / 5; //我们通过假设x的值  (x-1)/5 * 4
                // printf("total = %d\n", leftFishNum);
            }else
            {
                flag = 0; //如果不能被整除,就让我们的标记为0
                break; //结束当前循环
            }
            
        }
        
        //我们的flag 只有在找到了能够瞒住我们分配条件的第一个数出现的时候
        //也就是找到了最少要有多少鱼的时候才会为1
        if(flag)
        {
            break;
        }
    }
    
    //printf("Total = %d\n",totalFishNum);     /*输出结果*/
    return totalFishNum;
    
}
int shengYu(int a)
{
        //每个人都按同样的方法拿鱼说明最后一个人至少拿到了一个鱼
    // 所以第5个人拿到了1个鱼 还剩4个鱼 
    //           第4 个人拿到了 (1*5+1)/4   还剩(1*5+1)*5+1 
    //         第a个人拿到了((a+1)*5+1)/4 
        int i;//定义i来存每一拿的鱼 第5个人至少拿了一条 
        if(a==5)
        {
                i=1;
        }else
        {
                i=(shengYu(a+1)*5+1)/4;
        }
        return i;
} 
int main()
{
        int sum=0;
        int leastFishNum();
        int sum2=leastFishNum();
        sum =shengYu(1)*5+1;//用shengYu函数求出第一个人拿的鱼 再求出刚开始钓的鱼 
        printf("总共的鱼最少有%d条\n",sum);
        printf("总共的鱼最少有%d条\n",sum2);
}
 | 
 |