分骆驼

今天看面试宝典,想起来小学的分骆驼问题,我们来回顾下:

有位老人死后留下了十七只骆驼及一张遗嘱给他的三个儿子。依照遗嘱的划分,老大可以得到一半数量的骆驼,老二则是三分之一,老三则是九分之一。三兄弟为了这问题大伤脑筋,最后没有办法,只好请族长裁断。族长了解情况后,笑眯眯地表示,为了要让兄弟们和睦相处,决定再送他们一只骆驼,以凑成十八只。这样子,老大就得了九只骆驼,老二、老三则分别拿到六只和两只。有趣的是,三兄弟的骆驼加起来还是十七只,多的那一只,仍旧完璧归赵地回到族长手中。

小时候感觉好神奇啊,借个骆驼就能解决问题!真是吊!但是本身1/2+1/3+1/9就不等于1。意思就是他们老爸分的时候就没当单位1来分。

而且巧的是用17乘以每个分数的结果换算成小数再四舍五入正好是9,6,2.所以才能分,所以这还不算什么难题。

试问:他们老爸要是再坑点,给大儿子留5/9或者给老三留1/6,你看怎么分吧!!借多少头也搞不定啊。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

const int Camel_Num = 17;

void DivCamel(double big, double mid, double litter)
{
    int res[3] = { 0, 0, 0 };
    while (true && res[0] < Camel_Num && res[1] < Camel_Num && res[2] < Camel_Num)
    {
        if ((double)res[0] / Camel_Num >= big)
        {
            while (true && res[0] < Camel_Num && res[1] < Camel_Num && res[2] < Camel_Num)
            {    
                if ((double)res[1] / Camel_Num >= mid)
                {
                    res[2] = (Camel_Num - res[0] - res[1])>=0?Camel_Num - res[0] - res[1]:0;
                    if ((double)res[2] / Camel_Num >= litter)
                    {
                        cout << res[0] << "," << res[1] << "," << res[2] << endl;
                    }
                }
                res[1]++;
            }
        }
        res[0]++;
    }
}


int main()
{
    DivCamel(1.00 / 2.00, 1.00 / 3.00, 1.00 / 9.00);

    return 0;
}

这个换成1.00/6.00,就木有输出了。(程序写的糟糕,媳妇催着去陪她了)。

原文地址:https://www.cnblogs.com/wyc199288/p/5197714.html