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