數學趣題_父親分羊

同步至 Github-WeeklyARTS-Algorithmgit

1、題目描述

有個老父親,有17頭羊,臨終前把三個兒子叫來。分給大兒子一半的羊,二兒子1/3的羊,小兒子1/9的羊。三個兒子不知道怎麼分,只好請教鄰居。聰明的鄰居借給了他們一頭羊,這樣總共就有18頭。大兒子領走一半9頭羊,二兒子領走1/3共6頭羊,小兒子領走1/9,也就是2頭羊。鄰居最後把借的羊牽回去了。咱們的問題是,知足這樣條件的數字還有哪些?即遺產有n頭羊,大兒子分得1/x, 二兒子分得1/y, 小兒子分得1/z,鄰居借給一頭羊。請編程找出這些知足條件的(n, x, y, z)。

github

2、題目分析

先估算出n的取值範圍,再根據判斷條件編寫程序。編程

假如先從 1/2 + 1/3 + 1/4 開始計算結果值,發現其大於1,而咱們須要找的是x y z三值加起來的結果小於等於1,所以咱們對其中一個值不斷增大。spa

當咱們發現 1/2 + 1/3 + 1/7 小於1時,此時能夠列不等式 1/2 + 1/3 + 1/7 >= n/n+1,解得 n <= 41。因此程序以下:code

#include<stdio.h>
#include<math.h>
int main()
{
    int n,x,y,z,counter;
    for(x = 1;x < 50;x++){
        for(y = 1;y < 50;y++){
            for(z = 1; z < 50;z++){
                for(n = 1;n < 50;n++){
                    //判斷條件 1,等式成立;2,x y z 三個值不相等;3,n要大於 x y z三個任一的值;4,x > y > z
                    if(((n+1)*(y*z + x*z + x*y) == n*x*y*z) && (x != y && x != z && y!=z) && (((n+1) >= x && (n+1) >= y && (n+1) >= z))) {
                        if ((x>y && y>z) && ((n+1)%x == 0 && (n+1)%y == 0 && (n+1)%z == 0)){
                            printf("n=%d,x=%d,y=%d,z=%d\n",n,x,y,z);
                            counter++;
                        }
                    }
                }
            }
        }
    }

    printf("知足條件的(n, x, y, z)爲%d\n",counter);

    return 0;
}

/*
Output
n=19,x=5,y=4,z=2
n=11,x=6,y=4,z=2
n=41,x=7,y=3,z=2
n=23,x=8,y=3,z=2
n=17,x=9,y=3,z=2
n=14,x=10,y=3,z=2
知足條件的(n, x, y, z)爲6
*/
相關文章
相關標籤/搜索