#include<stdio.h>
#define Max 100
int input(int *in,int *out)
{
int a,b;
printf("请输入来访时间和离开时间\n");
printf("范例:1\t\t3\n");
printf("餐会结束时请输入-1结束\n");
int count;
for(count=0;count<100;count++)
{
printf("第%d位访客来访时间和离开时间",count+1);
scanf("%d%d",&a,&b);
if((a!=-1)&&(b!=-1))
{
in[count]=a;
out[count]=b;
}
else
{
break;
}
}
return count+1;
}
void swap(int *p,int i,int j)
{
int temp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
void sort(int *p,int count)
{
for(int i=0;i<count;i++)
{
for(int j=i+1;j<count;j++)
{
if(p[i]>p[j])
{
swap(p,i,j);
}
}
}
}
int sum(int *p,int time,int count)
{
int all=0;
for(int i=0;i<count;i++)
{
if(p[i]<=time)
{all=all+1;}
}
return all;
}
void output(int *in,int *out,int count)
{
int time=0;
int inmall;
int outmall;
int stillIn;
for(time=0;time<=24;time++)
{
inmall=sum(in,time,count);
outmall=sum(out,time,count);
stillIn=inmall-outmall;
printf("%d时餐会的最大访客数为%d\n",time,stillIn);
}
}
void main()
{
int *in=new int;
int *out=new int;
int count=input(in,out);
sort(in,count);
sort(out,count);
output(in,out,count);
}
主要的思想有点麻烦,想清楚后代码简单
先分开记录访客的来访和离开的时间,分别放到两个数组中,
对这两个数组排序,分别统计某一时刻来过的人,和已经离开的人,然后相减得到的便是这会的访客人数。