计算机的优势: 计算速度
最笨的计算方法:
- 直接枚举每种可能的情况
- 情况属不是天文数字即可
- 要做到不遗漏
- 最好能不重复
实例:
1.鸡兔同笼
鸡兔共有50头,脚120只,问鸡兔各自的数量
public static void main(String[] args) { int headNum = 50; //头的总数 int footNum = 120; //脚的总数 for (int i = 0; i < headNum; ++i) { int j = headNum - i; if (2 * i + 4 * j == footNum) { System.out.println("鸡有"+i+"只,兔有" + j + "只"); } }
2.韩信点兵
部队人数大约有1000多人,不到2000,采用报数的方式,得到以下结果:
5人一组余1人, 7人一组余2人,8人一组余3人,求部队实际人数
public static void main(String[] args) { for (int i = 1000; i < 2000; ++i) { if (i % 5 == 1 && i % 7 == 2 && i % 8 == 3) { System.out.println("总人数:" + i); } } }
3.马与瓦
总共有 100 匹马,总共驮有 100 块瓦(古代的瓦,很大,很重)
每匹大马每次能驮 3 块瓦,每匹小马每次能驮 2 块瓦,小马驹每次 2个马驹驮 1块瓦
求各种马的数目
public static void main(String[] args) { int tiles = 100; // 瓦片数目 int horses = 100; // 马数量总和 for (int big = 0; big <= tiles / 3; ++big) { for (int mid = 0; mid <= tiles / 2; ++mid) { int small = horses - big - mid; if (small % 2 == 0 && big * 3 + mid * 2 + small / 2 == tiles) { System.out.println("各种马的数目: 大马: " + big + ", 小马: " + mid + ", 小马驹: " + small); } } } }
效果: