百元买鸡

sudo0m Lv4

题目:

  1. 我国古代数学家张丘建在《算经》一书中提出了一个数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?请设计程序解答上述问题。

思路:

每个类型都定义一个变量,找出变量范围,通过变量之间的联系计算求解

变量范围

  • i:[0,100]
  • j:[0,100]
  • k:[0,100]

必须同时满足:

  • 百钱:5*i+3*j+k/3 == 100
  • 百只:i+j+k == 100
  • 防止鸡雏出现小数问题 k%3==0

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class JavaDemo01 {
public static void main(String[] args) {
int i,j,k;
for(i=0;i<=100;i++){
for(j=0;j<=100;j++){
for(k=0;k<=100;k++){
if(k%3==0 && i+j+k ==100 && (5*i + 3*j + k/3 == 100)){
System.out.println("i="+i+",j="+j+",k="+k);
}
}
}
}
}
}

优化

缩短一下循环的范围

变量范围

  • i:[0,20] 一只5元 最多可以买 20*5 = 100
  • j:[0,33] 一只3元 最多可以买 3*33 = 99
  • k:[0,100] 一只 1/3元 最多可以买 300 ,但题目限制100只 , 所以最多100

既然到这里了,我们还可以再优化一下缩短到2层循环

我们总共需要买100只鸡,只需要知道两个就能得出另一个卖多少只

那么 k = 100 - i - j

那么还可以把条件满足改成

  • 百钱: 5*i+3*j+k/3 == 100
  • 隐藏条件: k%3==0

不需要百只鸡了

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
public class JavaDemo01 {
public static void main(String[] args) {
int i,j,k;
for(i=0;i<=20;i++){
for(j=0;j<=33;j++){
k = 100 - i - j;
if(5*i+3*j+k/3==100 && k%3==0){
System.out.println("公鸡"+i+"只, 母鸡"+j+"只, 小鸡"+k+"只");
}
}
}
}
}
  • 标题: 百元买鸡
  • 作者: sudo0m
  • 创建于 : 2024-10-02 14:20:02
  • 更新于 : 2024-10-02 14:50:16
  • 链接: https://sudo0m.tech/page/20241002142002/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
目录
百元买鸡