C語言 | 五人分魚
阿新 • • 發佈:2021-02-16
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; }
執行結果: