⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maxguest.htm

📁 “常见程式演算”主要收集一些常见的程式练习题目
💻 HTM
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>



  
  
  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">



  
  
  
  <link rel="stylesheet" href="css/print.css" type="text/css">



  
  
  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">



  
  
  
  <title>最大访客数</title>
</head>


<body>



<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>



<h1><a href="AlgorithmGossip.htm">Algorithm Gossip:&nbsp;最大访客数</a></h1>



<h2>说明</h2>
现将举行一个餐会,让访客事先填写到达时间与离开时间,为了掌握座位的数目,必须先估计不同时间的最大访客数。<br>
<h2>解法</h2>
这个题目看似有些复杂,其实相当简单,单就计算访客数这个目的,同时考虑同一访客的来访时间与离开时间,反而会使程式变得复杂;只要将来访时间与离开时间分开处理就可以了,假设访客 i 的来访时间为x[i],而离开时间为y[i]。<br>
<br>
在资料输入完毕之后,将x[i]与y[i]分别进行排序(由小到大),道理很简单,只要先计算某时之前总共来访了多少访客,然后再减去某时之前的离开访客,就可以轻易的解出这个问题。 <br>



<br>
<h2> 实作</h2>

<ul>
  <li> C
  </li>
</ul>

<pre>#include &lt;stdio.h&gt; <br>#include &lt;stdlib.h&gt; <br>#define MAX 100 <br>#define SWAP(x,y) {int t; t = x; x = y; y = t;} <br><br>int partition(int[], int, int); <br>void quicksort(int[], int, int); // 快速排序法<br>int maxguest(int[], int[], int, int); <br><br>int main(void) { <br>    int x[MAX] = {0}; <br>    int y[MAX] = {0}; <br>    int time = 0; <br>    int count = 0; <br><br>    printf("\n输入来访与离开125;时间(0~24):"); <br>    printf("\n范例:10 15"); <br>    printf("\n输入-1 -1结束"); <br>    while(count &lt; MAX) { <br>        printf("\n&gt;&gt;"); <br>        scanf("%d %d", &amp;x[count], &amp;y[count]); <br>        if(x[count] &lt; 0) <br>            break; <br>        count++; <br>    } <br><br>    if(count &gt;= MAX) { <br>        printf("\n超出最大访客数(%d)", MAX); <br>        count--; <br>    } <br><br>    // 预先排序 <br>    quicksort(x, 0, count); <br>    quicksort(y, 0, count); <br><br>    while(time &lt; 25) { <br>        printf("\n%d 时的最大访客数:%d", <br>                   time, maxguest(x, y, count, time)); <br>        time++; <br>    } <br><br>    printf("\n"); <br><br>    return 0; <br>} <br><br>int maxguest(int x[], int y[], int count, int time) { <br>    int i, num = 0; <br><br>    for(i = 0; i &lt;= count; i++) { <br>        if(time &gt; x[i]) <br>            num++; <br>        if(time &gt; y[i]) <br>            num--; <br>    } <br><br>    return num; <br>} <br><br>int partition(int number[], int left, int right) { <br>    int i, j, s; <br><br>    s = number[right]; <br>    i = left - 1; <br><br>    for(j = left; j &lt; right; j++) { <br>        if(number[j] &lt;= s) { <br>            i++; <br>            SWAP(number[i], number[j]); <br>        } <br>    } <br><br>    SWAP(number[i+1], number[right]); <br>    return i+1; <br>} <br><br>void quicksort(int number[], int left, int right) { <br>    int q; <br><br>    if(left &lt; right) { <br>        q = partition(number, left, right); <br>        quicksort(number, left, q-1); <br>        quicksort(number, q+1, right); <br>    } <br>} <br></pre>

<br>

<ul>
  <li> Java
  </li>
</ul>

<pre>import java.io.*;<br>import java.util.*;<br><br>public class MaxVisit {<br>    public static int maxGuest(int[] x, int[] y, int time) {<br>        int num = 0; <br><br>        for(int i = 0; i &lt; x.length; i++) { <br>            if(time &gt; x[i]) <br>                num++; <br>            if(time &gt; y[i]) <br>                num--; <br>        } <br><br>        return num; <br>    }<br>    <br>    public static void main(String[] args) throws IOException {<br>        BufferedReader buf = new BufferedReader(<br>                new InputStreamReader(System.in));<br>        System.out.println("输入来访时间与离开时间(0~24):");<br>        System.out.println("范例:10 15"); <br>        System.out.println("输入-1结束");<br>        <br>        java.util.ArrayList list = new ArrayList();<br>        <br>        while(true) { <br>            System.out.print("&gt;&gt;"); <br>            String input = buf.readLine();<br>            <br>            if(input.equals("-1")) <br>                break; <br>            <br>            list.add(input);<br>        }<br>        <br>        int[] x = new int[list.size()];<br>        int[] y = new int[list.size()];<br>        <br>        for(int i = 0; i &lt; x.length; i++) {<br>            String input = (String) list.get(i);<br>            String[] strs = input.split(" ");<br>            <br>            x[i] = Integer.parseInt(strs[0]);<br>            y[i] = Integer.parseInt(strs[1]);<br>        }<br>        <br>        Arrays.sort(x);<br>        Arrays.sort(y);<br>        <br>        for(int time = 0; time &lt; 25; time++) { <br>            System.out.println(time + " 时的最大访客数:" <br>                    + MaxVisit.maxGuest(x, y, time)); <br>        } <br>    }<br>}</pre>
<br>



</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -