穷举法例子

  


自动生成的方法存根
        我国古代数学家张邱建在《算经》中出了一道“百钱买百鸡”的问题,题意是这样的:
  5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,
  那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现 1publicclass Test_5 {

 

 1 public class Test_5 {
 2     public static void main(String[] args) {
 3         for (int gj = 0; gj <= 20; gj++) {// 公鸡5文一只,百钱可最多买20只
 4             for (int mj = 0; mj <= 33; mj++) {// 母鸡3文一只,百钱可最多买33只
 5                 for (int cj = 0; cj <= 100; cj++) {// 雏鸡1文三只,百钱可最多买300只
 6                     if (gj * 5 + mj * 3 + cj / 3 == 100 && gj + mj + cj == 100 && cj % 3 == 0) {// (买公鸡钱数+母鸡钱数+雏鸡钱数==100)
 7                         // &&(公鸡个数+母鸡个数+3倍的雏鸡个数==100) 和雏鸡是3 的倍数
 8                         System.out.println("公鸡" + gj + "母鸡" + mj + "雏鸡" + cj);
 9                     }
10                 }
11             }
12         }
13     }
14 }

 

 

 

水仙花数

找出100——999种所有的水仙花数。
分析:水仙花数是指:一个三位数,其各位数字立方和等于该数本身。例如:370=33+73+00.这就说明370是一个水仙花数。

例如 153=1*1*1+5*5*5+3*3*3
所以要判断一个三位数是不是水仙花数,得先取得这个三位数的的个位,十位和百位。这里我由一下几种方法:

 

 1 public class Test_6 {
 2     public static void f() {
 3         for (int i = 1; i < 10; i++) {
 4             for (int j = 0; j < 10; j++) {
 5                 for (int k = 0; k < 10; k++) {
 6                     if (i * i * i + j * j * j + k * k * k == i * 100 + j * 10 + k) {
 7                         System.out.println(i * 100 + j * 10 + k);
 8                     }
 9                 }
10             }
11         }
12     }
13 
14     public static void f2() {
15         int a = 0, b = 0, c = 0;
16 
17         for (int j = 100; j < 1000; j++) {
18             a = j / 100; // 获得百位
19             b = j % 100 / 10; // 获得十位
20             c = j % 10; // 获得个位
21             if (j == a * a * a + b * b * b + c * c * c)
22                 System.out.println(j);
23         }
24     }
25 
26     public static void main(String[] args) {
27         f();
28         f2();
29     }
30 }

 百马百担
有100匹马驮100担货,大马驮3担,中马驮2担,两匹小马驮一担,问有大,中,小各多少匹马?

解析:其实跟百钱买百鸡一样的

public class Test_7 {
    public static void print() {
        for (int d = 1; d <= 100; d++) {
            for (int z = 1; z <= 100; z++) {
                for (int x = 1; x <= 200; x++) {
                    if (d * 3 + z * 2 + x / 2 == 100 && d + z + x == 100 && x % 2 == 0) {
                        System.out.println("大马:" + d + " 中马:" + z + " 小马:" + x);
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        print();
    }
}

 

posted @ 2017-03-11 01:20  Kmily_Lee  阅读(2548)  评论(0编辑  收藏  举报