zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法训练 接水问题

    题目描述
    有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。

    输入输出格式
    输入格式:
    输入文件共两行,第一行为n;第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。

    输出格式:
    输出文件有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

    输入输出样例
    输入样例#1:
    10
    56 12 1 99 1000 234 33 55 99 812
    输出样例#1:
    3 2 7 8 1 4 9 6 10 5
    291.90

    import java.util.Arrays;
    import java.util.Scanner;
    
    
    public class paiduijieshui {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		while (sc.hasNext()) {
    			double n = sc.nextDouble();
    			double m = 0;
    			double h = n - 1;
    			double x[] = new double[(int) n];
    			double y[] = new double[x.length];  //记录每个数据的编号
    			int z[] = new int[x.length];       //记录每个数据的编号是否输出
    			for (int i = 0; i < n; i++) {
    				x[i] = sc.nextInt();
    				y[i] = x[i];    
    					}
    			Arrays.sort(x);
    			for (int i = 0; i < n; i++) {      //”踏踏实实“的方法
    				for (int j = 0; j < n; j++) {
    					if (y[j] == x[i] && z[j] == 0) {
    						if (i == n - 1) {
    							System.out.println(j + 1);
    						} else {
    							System.out.print(j + 1+" ");
    						}
    						z[j] = 1;
    						break;  //去重,防止运算过大;
    					}
    				}
    			}
    			for (int i = 0; i < n; i++) {
    				m += x[i] * (h--);     //等待总时间
    			}
    			System.out.println(String.format("%.2f", m / n));
    		}
    	}
    
    }
    
    
  • 相关阅读:
    [LeetCode] 90. 子集 II
    [LeetCode] 91. 解码方法
    [LeetCode] 89. 格雷编码
    [LeetCode] 88. 合并两个有序数组
    转:Google论文之三----MapReduce
    转:Google论文之二----Google文件系统(GFS)翻译学习
    转:Zend Framework 2.0 分析
    转:PHP include()和require()方法的区别
    转:cookie和session(二)——php应用
    转:cookie和session(一)——原理
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948472.html
Copyright © 2011-2022 走看看