JAVA 百马百担
📝现有100匹马,需要驮100担货
其中大马能驮3担,中马能驮2担,两批小马能驮1担
📌问:驮100担货,大马、小马、中马各需要多少?
✏解法一:穷举法
使用三个For循环遍历大马,小马,中马
//i为大马,j为中马,k为小马
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
for (int k = 0; k < 100; k++) {
//遍历
}
}
}
✒然后根据题意写判断条件大马的计算方式为数量 * 3,中马为数量 * 2,小马两匹马驮一担所以 / 2即可
if (i * 3 + j * 2 + k / 2 == 100) //最后驮的数量为100
😟但是题目要求是百马百担,现在只得出了如何百担,显然题目要求使用100匹马,所以就要再加一个判断条件
if (i + j + k == 100) //马的数量必须为100批
😣但是这个依然不是我们想要的结果,因为疏忽了2匹小马驮1担,所以小马的数量必须为2的倍数
if (k % 2 == 0) //两批小马驮1担,需要为2的倍数
✨以上三个条件即可满足For循环的遍历条件,为了减少代码沉余,所以将三个判断条件合并,即为
if (i * 3 + j * 2 + k / 2 == 100 && i + j + k == 100 && k % 2 == 0)
🎉最后在if语句块内打印符合条件的大马,中马,小马的的数量就好啦~~~
System.out.println(i + "\t" + j + "\t" + k);//分别打印大马,中马,小马数量
📑运行源码:
package Project;
public class Universal {
public static void main(String[] args) {
System.out.println("大" + "\t" + "中" + "\t" + "小");
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
for (int k = 0; k < 100; k++) {
if (i * 3 + j * 2 + k / 2 == 100 && i + j + k == 100 && k % 2 == 0) {
System.out.println(i + "\t" + j + "\t" + k);
}
}
}
}
}
}
✏解法二:数学法
设大马X匹,中马Y匹,小马Z匹
✒得方程组①②③④⑤ ↓
其中的Z&1 == 0,是将小马限制为偶数
✒由 ①②式可得到⑥⑦式↓
✒解得到⑧⑨式↓
✒将⑧⑨式带入③④式得到⑩式↓
✒又由⑤式得⑪式↓
使用⑧⑨⑪得出计算方法↓
for (int Z = 68; Z <= 80;Z += 2){
X = (Z / 2) * 3 - 100; //得出中马数量
Y = 200 - (Z / 2) * 5; //得出小马数量
//Print...
}
📑运行源码:
package Project;
public class Universal {
public static void main(String[] args) {
System.out.println("大" + "\t" + "中" + "\t" + "小");
for(int Z = 68 ; Z <= 80;Z += 2){
int X = (Z / 2) * 3 - 100;
int Y = 200 - (Z / 2) * 5;
System.out.println(X+ "\t" + Y + "\t" + Z);
}
}
}
完美散花~🎉🎉🎉