import java.util.Scanner; /** * 【题目描述】 * xn 的朋友 kelly 快要过生日了,他想买一件礼物送给 kelly ,现在他手上有面值 * 1元、5元、10元、20元、50元、100元的钞票若干,但不幸的是收银员没有足够的现金 * 用来找钱。xn 能不能用他手上的钱凑出与他想要的礼物价值一样的面值出来呢。 * * 【输入】 * 输入第一行是一个数 n ,表示样例数目(n <= 100)。 * 下面 n 行,每行 7 个数:v1,v2,v3,v4,v5,v6,vp,分别表示1元、5元、10元、20元、 * 50元和100元的张数,最后的 vp 表示 xn 想要购买的礼物的价格。 * (0 <= v1,v2,v3,v4,v5,v6 <=10, 0 < vp <= 1000) * * 【输出】 * 对于每组数据输出一行,如果 xn 能用他手上的钱凑出与礼物价格相等的钱数,输出 yes , * 否则输出 no 。 * * 【样例出入】 * 2 * 1 1 1 1 1 1 30 * 1 0 0 1 0 1 90 * * 【样例输出】 * yes * no * */ public class D { /** * @param args */ public static void main(String[] args) { int[] v = { 1, 5, 10, 20, 50, 100 };// 面值 int[] m = { 0, 0, 0, 0, 0, 0 };// 凑完后各面值对应的数量 Scanner sc = new Scanner(System.in); int r = sc.nextInt();// 测试用例数 for (int k = 0; k < r; k++) { int[] n = new int[7];// 用于存储一行测试用例 // 从控制台读入测试用例 for (int i = 0; i < 7; i++) { n[i] = sc.nextInt(); } int vp = n[6]; // 剩余价值 for (int i = 5; i >= 0; i--) { if (vp >= v[i] * n[i]) { // 如果剩余价值大于或者等于现有面值i的总价值 m[i] = n[i];// 记录所需面值i的钱的数量 vp = vp - v[i] * n[i];// 重新计算剩余价值 } else if (vp < v[i] * n[i]) { // 如果剩余价值小于现有面值i的总价值 m[i] = vp / v[i];// 记录所需面值i的钱的数量 vp = vp - v[i] * (vp / v[i]);// 重新计算剩余价值 } if (vp == 0) { // 如果剩余价值为0,也就是说凑够了 break;// 跳出 } } if (vp == 0) { System.out.println("yes"); for (int i = 0; i < 6; i++) { System.out.println(v[i] + "元:" + m[i]); } } else { System.out.println("no"); } } } }