疆场景算法(Java实现)
<一>咖啡的香气
1.题目描述:
自从零食间开始免费供应上好的咖啡豆,小杰每天午休后都会来到零食间,按下咖啡机的按钮,等待着杯里弥漫开来的香气把自己淹没,纷乱的思绪也渐渐在水雾中模糊。“小杰,你还有N个bug没修,别摸鱼了,快来解bug!”一个不合时宜的声音往往会在此时响起,小杰的脑海中瞬间闪过了无数个文件,无数行代码随着咖啡的香气不断滚动。
“我是不可能写bug的,这辈子都不可能与bug的...",小杰边念叨着,一边开始在脑海里盘算起来。
假设每喝一杯咖啡(喝咖啡的时间忽略不计)就能让自己一个小时内的debug效率提升到原来的A倍,- 小时内重复喝没用, 最多只能喝X杯,太多了晚上会睡不着, 并且为了保证可持续发展,每天最多只能专注工作8个小时,而在没喝咖啡的状态下解决每个bug所需要的时间为t1,t2.....tN分钟。
小杰的咖啡还没有喝完,你能帮他计算出他今天能解完所有bug吗?如果能,最少需要多长时间?
输入:
输入包含多组测试数据,每组数组:
第一行有三个正整数N ,A, X分别表示,bug的总数,喝一杯咖啡在一小时内debug效率的倍数,。
(1 <=N<= 100,1 1=A<=8,1<=x<=8)
第二行有N个正整数,由空格分割开,第i个正整数ti表示解决第i个bug需要的分钟数,(1<=ti<=1000)
输出:
对于每组测试数据:
输出一个数字,如果不能解完所有bug.则输出0,如果可以,则输出最少需要的分钟数T (T为正整数,如不满分钟则按一分钟计算一且超过8小时则认为不能解完)
样例输入:
8 2 8
60 60 60 60 60 60 60 60
4 3 3
333 77 100 13
样例输出:
240
175
代码如下:
package com.ymm.core.dajiang; import java.util.Scanner; public class One { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); //bug的总数 int A = in.nextInt(); //喝一杯咖啡在一小时内debug效率的倍数 int X = in.nextInt(); //最多可以喝的咖啡数目 int[] arr = new int[N]; for(int i = 0 ; i < N ;i++) { arr[i] = in.nextInt(); } System.out.println(coffee(N,A,X,arr)); } private static int coffee(int N,int A,int X,int[] arr) { int res = 0; //bug的总时间 for(int i = 0; i < arr.length ; i++) { res += arr[i]; } int time1 = X *60 *A; //喝咖啡的时间 int time2 = (8 - X) *60; //剩余时间 if(res > (time1 + time2)) { return 0; }else if(res < time1) { if(res % A != 0) { return res / A + 1; }else { return res / A; } }else { int b = res - time1; return b + X *60; } } }
<二> 应该吃哪个呢
1.题目描述:
在零食间里有一个季食柜,里面会半价供应很多好吃的零食,柜子被隔成了一个个小格子,类似一个矩阵,每个格子里会放置由前台小姐姐们精心挑选的零食,并且标上相应的价格。
小A是个大吃货,每天他都要光顾次零食间,但是他又要减肥,于是他便对自己做了一个约束,每次只能从里面拿走总价格少于V的零食。这时候问题来了,对于每种零食,小A都有一个内心的满意度,小A希望每次都能吃上让自己最满意的零食。假设零食柜里每个格只放置种零食, 每种零食的数量是有限的,买完就没有了,季食只能按照整数倍购买,不能只买半件。问小A在有限价格内买到的季食的总满意度最高是多少?
输入:
输入包含多组测试数据,每组数组:
第一行有两个正整数N, T,分别表示,零食的种类数目和小A最多用于购买零食的口钱。(1<=N<= 100,1 <=T <= 10000)
接下来有N行, 每行有三个正整数用空格隔开,按顺序表示零食需要的价格v,满意度和零食的数量c。
(1 <=V<= 1001 <=|<=100,1<=c<= 100)
输出:
对于每组测试数据:
输出一个正整数如果无法购买任何一个零食输出0,否则输出最大的满意度。
样列输入:
2 10
1 1 1
1 1 1
3 100
26 100 4
5 1 4
5 2 2
样例输出:
代码如下:
package com.ymm.core.dajiang; import java.util.ArrayList; import java.util.Scanner; public class Two { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int n = scanner.nextInt(); int t = scanner.nextInt(); ArrayList<Merchandise> arr = new ArrayList<>(); int res = 0; int minPre; for (int i = 0; i < n; i++) { arr.add(new Merchandise(scanner.nextInt(),scanner.nextInt(),scanner.nextInt())); } for (int i = 0; i < n-1; i++) { for (int j = n-1; j >i; j--) { Merchandise o1 = arr.get(j-1); Merchandise o2 = arr.get(j); if(o1.avg>o2.avg){ arr.set(j,o1); arr.set(j-1,o2); } } } for (int i = n-1; i >= 0; i--) { Merchandise o1 = arr.get(i); while (t>=o1.v&&o1.c>0){ o1.c--; t-=o1.v; res+=o1.l; } } System.out.println(res); } } static class Merchandise{ int v; int l; int c; double avg; public Merchandise(int v, int l, int c) { this.v = v; this.l = l; this.c = c; avg = l/(double)v; } } }