📝现有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匹

✒得方程组①②③④⑤ ↓

{3X+2Y+Z2=100X+Y+Z=100X 0Y0Z0,Z&1==0\begin{cases} 3X+2Y+\frac Z2 = 100 \\ X+Y+Z = 100\\ X \geq\ 0 \\ Y \geq 0 \\ Z \geq 0, Z\&1 == 0\\ \end{cases}

其中的Z&1 == 0,是将小马限制为偶数

✒由 ①②式可得到⑥⑦式↓

{3X+2Y=100Z2X+Y=100Z\begin{cases} 3X+2Y= 100 -\frac Z2\\ X+Y = 100 -Z\\ \end{cases}

✒解得到⑧⑨式↓

{Y=1.5Z100Y=2002.5Z\begin{cases} Y = 1.5Z - 100\\ Y=200-2.5Z\\ \end{cases}

✒将⑧⑨式带入③④式得到⑩式↓

2003 Z 80\frac {200}{3} \leq\ Z \leq\ 80

✒又由⑤式得⑪式↓

68 Z 80&&Z&1==068 \leq\ Z \leq\ 80\&\& 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);
        }
    }
}

完美散花~🎉🎉🎉