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");
}
}}

解决方案 »

  1.   

    应该这样: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 + "只");
    }
    }
    }
    }
    }
    }
      

  2.   


    int count = 0;
    for(int i=0;i<=20;i++){
    for(int j=0;j<=(100-i*5)/3;j++){
    int k = 100 - i * 5 - j * 3;
    System.out.printf("公鸡:%d 母鸡:%d 小鸡:%d \n",i,j,k);
    count++;
    }
    }
    System.out.println("一共有中" + count +"解法");
      

  3.   

     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+"--大公鸡--母鸡--小鸡");
     }
     }
     }
     }
     }
      

  4.   

    if (sum == 100 && k / 3 ==0) 改成 if (sum == 100 && k % 3 ==0)
    就行了,前面的只有K == 0 才成立
      

  5.   

    哦,看错了,看错题目了!
    int count = 0;
    //如果公鸡必须买,i就从1开始
    for(int i=0;i<=20;i++){
    for(int j=0;j<=(100-i*5)/3;j++){
    int k = (100 - i*5 -j*3)*3;
    if((j + k + i) == 100) {
    System.out.printf("公鸡:%d 母鸡:%d 小鸡:%d \n",i,j,k);
    count++;
    }
    }
    }
    System.out.println("一共有中" + count +"解法");
      

  6.   

    用两层for循环,让计算机自己用穷举法计算,我做过这个程序
      

  7.   

    i 和 j 是公鸡和母鸡的数量,而i*5+j*3是花的钱数, k=100-i*5-j*3, k 这里是剩下的可以买小鸡的钱数。 后面的输出把鸡的数量和钱数整混了!
      

  8.   

    鸡翁: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
    满足题意,其他均不满足
    怎会把程序写的那么复杂
      

  9.   

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

  10.   

    首先,方法是好方法,但在下感觉有两点问题:
    1、计算机的作用就是用来简化人的劳动的,它唯一的优点就是运算速度快。像百鸡问题这种古老的问题很早就有解法了,但一些问题的解法需要高深的数学知识,一般人掌握不了。但用计算机可以用类似于穷举这样的方法来减轻人的负担,不用再去做大量的计算。
    2、对问题的解释不到位,简单来说就是让人有点看不懂。可能LS的数学水平很高,有些分析过程不写出来自己也明白,但这样让别人看起来就费劲了。
    至于LS说的余数定理,在下查过余数定理与孙子剩余定理的资料了,但感觉和这道题没什么联系……
      

  11.   

    就15楼的方法来补充下在下自己的分析过程吧:就从7x+4y=100开始(14x+8y=200推出的是7x+4y=100哈):7x+4y=100 => 7x=4(25-y)  ①
    ∵x、y为整数
    ∴7y必定有因数4
    再∵4与7互质
    ∴x必定有因数4
    => 有一整数m使x=4m,后面的推导LS已经给出的,在下这里就不累述了。再由①可推出:
    7*4m=4(25-y) => y=25-7m
    由此可得出所有解:m      x      y      z
    0      0      25     75
    1      4      18     78
    2      8      11     81      
    3      12     4      84PS:LS还提到这道题可以用线性规划求解,在下实在看不出这题与数学规划之间的联系。
    弱弱的问一句:如果用线性规划求解的话,目标函数是什么?
      

  12.   

    7X = 100 - 4Y , 4 | 7X , (7,4)=1 , 4 | x 余数定理(或数论)的内容。
      

  13.   

    我觉得,应该贪心算法吧
    --signature------------------
    http://www.mowker.com/qklb/