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");
}
}}
* 百鸡问题
* 我国古代数学家张丘建在《张丘建算经》一书中提出了“百鸡问题”:
* 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁,鸡母,鸡雏各几何?
* @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");
}
}}
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 + "只");
}
}
}
}
}
}
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 +"解法");
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+"--大公鸡--母鸡--小鸡");
}
}
}
}
}
就行了,前面的只有K == 0 才成立
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 +"解法");
鸡母: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
满足题意,其他均不满足
怎会把程序写的那么复杂
问题二:虽然题目是以公鸡、母鸡、小鸡的顺序提出的,但程序设计为何一定要按这个顺序?有时适当改变下思考顺序可能得到意想不到的结果。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));
}
}
}
1、计算机的作用就是用来简化人的劳动的,它唯一的优点就是运算速度快。像百鸡问题这种古老的问题很早就有解法了,但一些问题的解法需要高深的数学知识,一般人掌握不了。但用计算机可以用类似于穷举这样的方法来减轻人的负担,不用再去做大量的计算。
2、对问题的解释不到位,简单来说就是让人有点看不懂。可能LS的数学水平很高,有些分析过程不写出来自己也明白,但这样让别人看起来就费劲了。
至于LS说的余数定理,在下查过余数定理与孙子剩余定理的资料了,但感觉和这道题没什么联系……
∵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还提到这道题可以用线性规划求解,在下实在看不出这题与数学规划之间的联系。
弱弱的问一句:如果用线性规划求解的话,目标函数是什么?
--signature------------------
http://www.mowker.com/qklb/