1. 程式人生 > 其它 >C語言 | 五人分魚

C語言 | 五人分魚

技術標籤:C——題目C/C++c語言資料結構演算法

A、B、C、D、E 五人在某天夜裡合夥去捕魚,到第二天凌晨時都疲憊不堪,於是各自找地方睡覺。

日上三杆,A 第一個醒來,他將魚分為五份,把多餘的一條魚扔掉,拿走自己的一份。

B 第二個醒來,也將魚分為五份,把多餘的一條魚扔掉拿走自己的一份。 。

C、D、E依次醒來,也按同樣的方法拿魚。

問:他們合夥至少捕了多少條魚?以及每個人醒來時見到了多少魚?


方法一

分析:這個題目非常有趣,我開始想著倒著往回推,第五人見到最少4條魚,但是第三個人怎麼把6條魚分成四份呢?我的思路錯了。於是我又想到最後一個人看到的魚一定是大於4的,那就計算出每一個人見到的魚的數量,判斷這個數字是否能夠整除5,如果能,則可知道最初的魚的數量。

思路:從5開始,嘗試每一個數字(這個數字是魚最初的數量),分別計算出後四個人見到的魚的數量記為 j、k、l、m,之後判斷 j、k、l、m是否能被5 除後餘1

#include <stdio.h>
int main(){
    int n,x,j,k,l,m;
    for(n=5;;n++){
        j=4*(n-1)/5;
        k=4*(j-1)/5;
        l=4*(k-1)/5;
        m=4*(l-1)/5;
        if(n%5==1&&j%5==1&&k%5==1&&l%5==1&&m%5==1){
            printf("至少合夥捕魚:%d條\n",n);
            printf("分別見到魚的條數:\n第一個人:%d \n第二個人:%d \n第三個人:%d \n第四個人:%d\n第五個人:%d \n",n,j,k,l,m);
            break;
        }
    }
    return 0;
}

執行結果:

方法二

思路:從5開始,嘗試每一個數字(這個數字是最後一個人見到魚的數量),分別計算出前四個人見到的魚的數量記為 j、k、l、m,之後判斷 j-1、k-1、l-1、m-1是否能被5 除後餘1

#include <stdio.h>
int main(){
    int n,x,j,k,l,m;
    for(n=5;;n++){
        j=5*n/4+1;
        k=5*j/4+1;
        l=5*k/4+1;
        m=5*l/4+1;
        if(n%5==1&&j%5==1&&k%5==1&&l%5==1&&m%5==1){
            printf("至少合夥捕魚:%d條\n",m);
            printf("分別見到魚的條數:\n第一個人:%d \n第二個人:%d \n第三個人:%d \n第四個人:%d\n第五個人:%d \n",m, l, k, j, n);
            break;
        }
    }
    return 0;
}

執行結果: