Java 蓝桥杯 算法训练 貌似化学
**
貌似化学
**
问题描述
现在有a,b,c三种原料,如果他们按x:y:z混合,就能产生一种神奇的物品d。
当然不一定只产生一份d,但a,b,c的最简比一定是x:y:z
现在给你3种可供选择的物品:
每个物品都是由a,b,c以一定比例组合成的,求出最少的物品数,使得他们能凑出整数个d物品(这里的最少是指三者个数的总和最少)
输入格式
第一行三个整数,表示d的配比(x,y,z)
接下来三行,表示三种物品的配比,每行三个整数(<=10000)。
输出格式
四个整数,分别表示在最少物品总数的前提下a,b,c,d的个数(d是由a,b,c配得的)
目标答案<=10000
如果不存在满足条件的方案,输出NONE
样例输入
3 4 5
1 2 3
3 7 1
2 1 2
样例输出
8 1 5 7
**
题解:
**
其实这就是一道经典的数学问题,小编觉得这道题的难点就是难在题很难读懂,如果有不对的地方还请大佬指正
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
int[] num = new int[13];
Scanner sc = new Scanner(System.in);
for (int i = 1; i < num.length; i++) {
num[i] = sc.nextInt();
}
String str = "";// 这里就是为了保存一下最小的那一组数
// 因为完全涉及不到计算领域所以可以用String保存
int min = Integer.MAX_VALUE;
for (int i = 1; i < 100; i++) {
for (int j = 1; j < 100; j++) {
for (int j2 = 1; j2 < 100; j2++) {
int a = i * num[4] + j * num[7] + j2 * num[10];
int b = i * num[5] + j * num[8] + j2 * num[11];
int c = i * num[6] + j * num[9] + j2 * num[12];
if (a / num[1] == b / num[2] && b / num[2] == c / num[3] && a % num[1] == 0 && b % num[2] == 0
&& c % num[3] == 0) {
int d = a / num[1];
if (min > i + j + j2 + d) {
min = i + j + j2 + d;
str = i + " " + j + " " + j2 + " " + d;
}
}
}
}
}
if (min == Integer.MAX_VALUE)
System.out.println("NONE");
System.out.println(str);
}
}