壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 937|回复: 0

韩信点兵问题的简单算法

[复制链接]
发表于 2009/9/16 20:23:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 luosijin 于 2009/9/16 20:44 编辑

有朋友问起这个问题:
      爱因斯坦曾出过这样一道有趣的数学题,有一个长阶梯,每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶,若每步上5阶,后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后一阶也不剩。问至少有多少阶阶梯?编写一个JAVA程序,解决该问题。
       这个是我国古代的韩信点兵问题:古人用剩余定理口算或心算,我们现在有计算机了,算法很简单:
public static void main(String[] args) {   
         int x;   
            for (x = 0; x < 200; x++)   
            {   
                if (x % 2 == 1 && x % 3 == 2 && x % 5 == 4 && x % 6 == 5 && x % 7 == 0)   
                {   
                    System.out.print("这个数字是:" +x);   
                }   
            }   
    }  
说明:因为要取最小数,所以先设最大值100,无解,再设为200,得119
后来有朋友提起是7的倍数,于是再优化下:

public static void main(string[] args)   
        {   
            int x;   
            for (x = 0; x < 200; x+= 7)   
            {   
                if (x % 2 == 1 && x % 3 == 2 && x % 5 == 4 && x % 6 == 5)   
                {   
                     System.out.print("这个数字是:" + x);   
                }   
            }   
        }  
再考虑是奇数,更加简洁:
public static void main(string[] args)   
        {   
            int x;   
            for (x = 7; x < 200; x+=14)   
            {   
                if ( x % 3 == 2 && x % 5 == 4 && x % 6 == 5)   
                {   
                     System.out.print("这个数字是:" + x);   
                }   
            }   
        }  
再考虑:台阶阶梯总数加一是为2、3、5、6的最小公倍数,而且是7的倍数,所以定是30的倍数减1,可得如下算法:
public static void main(string[] args)   
       {   
           int x;   
           for (int i = 1; i < 10; i++)   
           {   
               if ((i * 30 - 1) % 7 == 0)   
               {   
                   x = (i * 30 - 1);   
                    System.out.print("这个数字是:" + x);   
               }   
           }   
        }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/28 23:50 , Processed in 0.014007 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表