疆场景算法(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;
        }
	}

}

 

 


 

 

posted @ 2019-08-11 17:29  离愁i  阅读(535)  评论(0编辑  收藏  举报