代码改变世界

韩信点兵算法

2012-03-07 15:55  随风浪迹天涯  阅读(2779)  评论(1编辑  收藏  举报

最近,看书看到这个算法。很有意思。

算法来源:

话说有一次韩信带兵,人数在百人左右,然后它就那些士兵排队,3个人一行排的时候多了一个人,7个人一列排的时候少2个人,5个人排的时候刚刚好。

刚开始碰到到这道题的时候,不过后来突然想到了一个函数,问题就比较好解决了。

在解决这个问题之前,请大家看一个方法:Math.DivRem()

DivRem(int a,int b,int out result):它的意思是说,输入2个整数,然后输出它们的余数。

这里有out关键字:C# 参考之方法参数关键字:params、ref及out 如果有兴趣的话,可以学习学习。

到这里,想到了那个方法,韩信点兵的算法的根源就是余数问题:

static int HanXinAlgorithm()
        {
            int num1 = 0;
            int num2 = 0;
            int num3 = 0;
            int result = 0;
            for (int i = 0; i < 100; i++)
            {
                Math.DivRem(i, 3, out num1);
                Math.DivRem(i, 5, out num2);
                Math.DivRem(i, 7, out num3);
                if (num1 == 1 && num2 == 0 && num3 == 5)
                    result = i;
            }
            return result;
        }

 得到的结果就是:

 

很简单吧!在哥给个链接。。http://zhidao.baidu.com/question/1031050.html

希望对你们有帮助。