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);
	}

}

原文地址:https://www.cnblogs.com/a1439775520/p/13079497.html