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; 
        }
    
    }
  • 相关阅读:
    [Agc081F/At2699] Flip and Rectangles
    [CF1216C] White Sheet
    stegsolve使用探究
    栅栏密码
    wireshark常用命令
    某团队线下赛AWD writeup&Beescms_V4.0代码审计
    某线下赛AWD
    BBScan — 一个信息泄漏批量扫描脚本
    ISG2018 web题Writeup
    巅峰极客第二场CTF部分writeup
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4008452.html
Copyright © 2011-2022 走看看