• 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));
    		}
    	}
    
    }
    
    
  • 相关阅读:
    学习python -- 第013天 类与对象
    学习python -- 第013天 bug
    学习python -- 第012天 函数(二)
    学习python -- 第012天 函数(一)
    学习python -- 第011天 字符串
    学习python -- 第010天 列表、元组、字典、集合总结
    排序_快速排序
    链表_逆置
    约瑟夫环-链表
    双栈_队列
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13079091.html
Copyright © 2020-2023  润新知