日期:2014-05-20  浏览次数:20698 次

百鸡问题
package com.wang;

/**
 * 百鸡问题
 * 我国古代数学家张丘建在《张丘建算经》一书中提出了“百鸡问题”:
 * 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁,鸡母,鸡雏各几何?
 * @author
 *
 */
public class BJ {
public static void main(String[] args) {
int i = 0; // 买鸡翁多少只
int j = 0; // 买鸡母多少只
int k = 0; // 买鸡雏多少只
System.out.println("输出买鸡翁,鸡母,鸡雏各多少只:");
// 假设最多可买19只鸡翁
for (i = 1; i < 20; i ++) {
// 最多可买33只鸡母
// System.out.print("\t i = " + i);
for(j = 1; j < 33; j ++) {
// System.out.print("\t j = " + j);
// 出去鸡翁,鸡母,可买鸡雏只数
k = 100 - i - j;
// System.out.print("\t k = " + k);
// System.out.print("\t k / 3 = " + k / 3);
// k % 3 ==0 鸡雏数目必须是三的倍数
int sum = i * 5 + j * 3 + k / 3;
// System.out.print("\t sum = " + sum);
if (sum == 100 && k / 3 ==0) {
System.out.print("\n");
System.out.println("鸡翁有:" + i + "只");
System.out.println("鸡母有:" + j + "只");
System.out.println("鸡雏有:" + k + "只");
}
}
System.out.print("\n");
}
}

}

------解决方案--------------------
应该这样:
Java code

public class Demo {
    public static void main(String[] args) {
        int i = 0; // 买鸡翁多少只
        int j = 0; // 买鸡母多少只
        int k = 0; // 买鸡雏多少只
        System.out.println("输出买鸡翁,鸡母,鸡雏各多少只:");
        // 假设最多可买19只鸡翁
        for (i = 1; i < 20; i ++) {
        // 最多可买33只鸡母s
            for(j = 1; j < 33; j ++) {
            // 出去鸡翁,鸡母,可买鸡雏只数
                k = 100 - i - j;
                // k % 3 ==0 鸡雏数目必须是三的倍数
                if(k%3==0){
                    int sum = i * 5 + j * 3 + k / 3;
                    if (sum == 100 ) {
                    System.out.print("\n");
                    System.out.println("鸡翁有:" + i + "只");
                    System.out.println("鸡母有:" + j + "只");
                    System.out.println("鸡雏有:" + k + "只");
                    }
                }
            }
        }
    }
}

------解决方案--------------------
for(int i=1;i<100;i++){
 
for(int s=1;s<100;s++){
 
for(int b=1;b<100;b++){
if((i*1.5+s*1.3+b*1.1)==100){
System.out.print(i+"--");
System.out.print(s+"--");
System.out.println(b+"--大公鸡--母鸡--小鸡");
}
}
}
}
}
------解决方案--------------------
鸡翁:x
鸡母:y
鸡雏:z
5x + 3y + z/3 =100
x + y + z = 100
则:
15x + 9y + z = 300
x + y + z =100
则:
14x + 8y = 200 =>7x +4y =200
根据余数定理,x必定能被4整除,设x = 4m
则:7m +y = 25 => y<25 and 7m < 25
则:m <=3,即m = 0,1,2,3
m = 0:
x:0
y:25
z:75
满足题意,其他均不满足
怎会把程序写的那么复杂

------解决方案--------------------
问题一:可能在下文言文不行,但上面的题目还是很简单的。至少在下并没看出“公鸡、母鸡、小鸡至少一只”之类的需求……(如果坚持认为至少一只的话把下面代码的循环初始条件从0改为1就行了)
问题二:虽然题目是以公鸡、母鸡、小鸡的顺序提出的,但程序设计为何一定要按这个顺序?有时适当改变下思考顺序可能得到意想不到的结果。
Java code

public class ChickenTest {
    public static void main(String[] args) {
        for (int i = 0; i < 21; i++)                    // i为公鸡数
            for (int j = 0; j < 100 - i + 1; j += 3) {     // 这里设j小鸡数目
                int k = 100 - i - j;

                if (5 * i + j / 3 + 3 * k == 100)
                    System.out.println(String.format("公鸡%d只,母鸡%d只,小鸡%d只", i, k,
                            j));
            }
    }
}