题目描述:
最近天气太热了,牛牛每天都要吃雪糕。雪糕有一盒一份、一盒两份、一盒三份这三种包装,牛牛一天可以吃多盒雪糕,但是只能吃六份,吃多了就会肚子疼,吃少了就会中暑。而且贪吃的牛牛一旦打开一盒雪糕,就一定会把它吃完。请问牛牛能健康地度过这段高温期么?
每个输入包含多个测试用例。 输入的第一行包括一个正整数,表示数据组数T(1<=T<=100)。 接下来N行,每行包含四个正整数,表示高温期持续的天数N(1<=N<=10000),一盒一份包装的雪糕数量A(1<=A<=100000),一盒两份包装的雪糕数量B(1<=B<=100000),一盒三份包装的雪糕数量C(1<=A<=100000)。
对于每个用例,在单独的一行中输出结果。如果牛牛可以健康地度过高温期则输出"Yes",否则输出"No"。
思路分析:
整体思路是先用一盒三份的来凑,然后再用一盒两份的来凑,最后用一盒一份的
先用一盒三份的,需要两盒,看c里有多少两盒,加到ans,然后c只可能剩1盒或者没剩
如果c剩一盒的话,需要仔细讨论以下
如果此时a,b均有,那么先用一盒a一盒b把这一盒c消耗掉,ans加一
如果a没有只有b,那么是不可能把这盒c消耗掉的,因为会出现一整盒没吃完
如果b没有a有,那么用三盒a把这盒c消耗掉,ans加一
然后现在讨论c没有的情况下,只看a和b
分别用三盒b和六盒a去使ans增加
看最后剩下的a和b还能否凑出六份
Java实现:
import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); while (t > 0) { int n = sc.nextInt(); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int ans = 0; ans = c/2; c %= 2; if (c == 1) { if (a > 0 && b > 0) { a--; b--; ans++; }else if (b == 0 && a >= 3){ a -= 3; ans++; } } ans += b/3; b %= 3; ans += a/6; a %= 6; if (b*2+a >= 6) { ans++; } if (ans >= n) System.out.println("Yes"); else System.out.println("No"); t--; } } }