zoukankan      html  css  js  c++  java
  • 最大访客

    理论:

    现将举行一个餐会,让访客事先填写到达时间与离开时间,為了掌握座位的数目,必须先估计不同时间的最大访客数。

    解法:

    这个题目看似有些复杂,其实相当简单,单就计算访客数这个目的,同时考虑同一访客的来访时间与离开时间,反而会使程式变得复杂;只要将来访时间与离开时间分开处理就可以了,假设访客 i 的来访时间為x[i],而离开时间為y[i]。

    在资料输入完毕之后,将x[i]与y[i]分别进行排序(由小到大),道理很简单,只要先计算某时之前总共来访了多少访客,然后再减去某时之前的离开访客,就可以轻易的解出这个问题。

    package 经典;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class MaxVisit {
    
        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            
            System.out.println("输入来访时间与离开时间(0~24):");
            System.out.println("范例:10 15"); 
            System.out.println("输入-1结束");
    
            BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
            
            ArrayList list=new ArrayList();
            
            while(true)
            {
                System.out.println(">>");
                String input=buf.readLine();
                
                if(input.equals("-1"))
                    break;
                else
                    list.add(input);
            }
            
            int[] x=new int[list.size()];
            int[] y=new int[list.size()];
            
            for(int i=0; i<list.size(); i++)
            {
                String input=(String)list.get(i);
                String[] str=input.split(" ");
                x[i]=Integer.parseInt(str[0]);
                y[i]=Integer.parseInt(str[1]);
            }
            
            Arrays.sort(x);
            Arrays.sort(y);
            
            for(int time = 0; time < 25; time++)
            { 
                System.out.println(time + " 时的最大访客数:" 
                        + MaxVisit.maxGuest(x, y, time)); 
            } 
        }
    
        private static int maxGuest(int[] x, int[] y, int time) {
            int num = 0; 
    
            for(int i = 0; i < x.length; i++) { 
                if(time > x[i]) 
                    num++; 
                if(time > y[i]) 
                    num--; 
            } 
    
            return num; 
        }
    
    }
  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4008452.html
Copyright © 2011-2022 走看看