使用结构体来处理这个问题。本题并没有完全按照题目要求做而是对他进行了一些扩展。
#include<stdio.h>
#include<string.h>
#define max 15
struct stu/*定义一个结构体存放数组标志位看当前的地方是否被占用*/
{
int flag;
} ;
struct stc/*定义结构体存放单位的名字和占用的场地*/
{
int flag1;
int begin;
int end;
char name[20];
};
struct stud/*c是存放公司的名字和场地的大小,a是存储具体被占用的场地*/
{
struct stc c[max];
struct stu a[100];
};
check(struct stud *p,int m,int n,int s)/*检查场地是否可以使用*/
{
int i=0;
for(i=m;i<=n;i++)
{
if((*p).a[i].flag==1)/*若不可用接返货*/
return 0;
}
for(i=m;i<=n;i++)/*可用给对应的标志位赋1*/
{
(*p).a[i].flag=1;
(*p).c[s].flag1=1;
}
return 1;
}
void gui_huan(struct stud *p,char *name,int n)/*归还相应场地*/
{
int i,k;
for(i=0;i<n;i++)/*通过输入的公司名字来匹配相应的公司,并归还相应的场地*/
{
if(!strcmp((*p).c[i].name,name))
{
(*p).c[i].flag1=0;/*公司存储信息标志位清零*/
for(k=(*p).c[i].begin-1;k<=(*p).c[i].end-1;++k)
{
(*p).a[k].flag=0;/*场地标志位请0*/
}
}
}
}
void cha_kan(struct stud *p,int flag,int l)/*查看场地是否可用,或看被占用场地*/
![C语言 详解华为笔试试题 租借网球场地 场地租借合同](http://img.413yy.cn/images/31101031/31124953t014e9c5b9537d9b4bc.jpg)
{
int i;
if(flag)
{
printf("没有用的场地号有n");
for(i=0;i!=100;i++)
{
if(!(*p).a[i].flag)/*输出没有被占用的场地*/
{
printf("%dt",i+1);
if(i%5==0)
printf("n");
}
}
}
else
{
int flag2;
for(i=0;i<max;i++)
{
if((*p).c[i].flag1)/*当公司位没有被清0的进行比较*/
{
printf("租借单位为n");/*输出相应的信息*/
printf("%sn",(*p).c[i].name);
printf("租借场地号为n");
for(int s=(*p).c[i].begin;s<=(*p).c[i].end;++s)
{
flag2=0;
printf("%dt",s);
if(s%5==0)
printf("n");
}
}
}
if(flag2)
printf("没有租借单位租借n");
}
}
void main()
{
struct stud p;
int i=0,m,n;
char name[20],c;
for(i=0;i!=100;i++)
p.a[i].flag=0;
for(i=0;i<max;i++)
p.c[i].flag1=0;
printf("您是来租借场地还是来归还场地,输入y租借场地n输入n归还场地,输入l来查看没有租用场地,输入m查看租用的场地,输入x退出n");
i=0;
while((c=getchar())!='x')
{
if(c=='y'||c=='Y')
{
int k;
printf("请输入您要租借的起始场地号和个数n");
scanf("%d%d",&m,&n);
getchar();
m--;
n--;
k=check(&p,m,m+n,i);
if(k==1)
{
p.c[i].begin=m+1;
p.c[i].end=m+n+1;
printf("场地可以租用,请输入您的单位名称n");
scanf("%s",p.c[i].name);
getchar();
while(p.c[i].flag1)
i++;
}
else
{
printf("场地已经被其它单位占用n");
}
}
else if(c=='n'||c=='N')
{
printf("请输入您的单位名称n");
scanf("%s",&name);
getchar();
gui_huan(&p,name,i);
printf("已经归还成功n");
}
else if(c=='l'||c=='Y')
{
int fla=1;
cha_kan(&p,fla,i);
getchar();
}
else if(c=='m'||c=='M')
{
int fla=0;
cha_kan(&p,fla,i);
getchar();
}
else
;
if(i==max)
i=0;
printf("n您是来租借场地还是来归还场地,输入y租借场地,输入n归还场地,输入l来查看场地,输入x退出n");
}
printf("谢谢使用n");
}