您的位置:首页 > 编程语言 > Go语言

Algorithm Gossip: 最大访客数

2015-02-04 00:48 295 查看
/****************************************
*  File Name  : arithmetic.c
*  Creat Data : 2015.2.4
*  Author     : ZY
*****************************************/

/*Algorithm Gossip: 最大访客数*/
/*现将举行一个餐会,让访客事先填写到达时间与离开时间,
为了掌握座位的数目,必须先估计不同时间的最大访客数。*/
/*访客i的来访时间x[i],离开时间y[i]*/
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define SWAP(x,y){int t;t = x;x = y;y = t;}

int maxguest(int x[],int y[],int count,int time)
{
int i,num = 0;
for(i = 0;i < count+1;i++)
{
if(time > x[i])
{
num++;
}
if(time > y[i])
{
num--;
}
}
return num;
}

int partition(int number[],int left,int right)//快速排序法
{
int i,j,s;
s = number[right];
i = left - 1;
for(j = left;j < right;j++)
{
if(number[j] < s+1)
{
i++;
SWAP(number[i],number[j]);
}
}
SWAP(number[i+1],number[right]);
return i+1;
}

void quicksort(int number[],int left,int right)
{
int q;
if(left < right)
{
q = partition(number,left,right);
quicksort(number,left,q-1);
quicksort(number,q+1,right);
}
}

int main(void)
{
int x[MAX] = {0};
int y[MAX] = {0};
int time = 0;
int count = 0;
printf("\n输入来访与离开125;时间(0~24):");
printf("\n范例:10 15");
printf("\n输入-1-1结束");
while(count < MAX)
{
printf("\n>>");
scanf("%d %d",&x[count],&y[count]);
if(x[count] < 0)
{
break;
}
count++;
}
if(count > MAX+1)
{
printf("\n超出最大访客数(%d)",MAX);
count--;
}
//预先排序
quicksort(x,0,count);
quicksort(y,0,count);
while(time < 25)
{
printf("\n%d 时的最大访客数:%d",time,maxguest(x,y,count,time));
time++;
}
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: