餐厅包间配置问题(C)
借用某位仁兄的题目,如下: 某餐厅有19个包间,编号为0~18,其中arr[i]存储第i个包间的座位数,arr[i]为0表示该包间已被预订。 int arr[19]={0,20,4,10,6,10,4,0,0,20,5,3,0,5,8,3,4,3,10} 其间有4组家庭前来就餐,编号为1~4。保存在数组brr中,其中brr[i]存储第i组家庭的人数。 包厢分配规则是: 每组家庭只安排一个包间,分配座位数与人数最接近且尚未分配的包间。如果有多个包间符合条件,则先安排编号大的包间。 有符合条件的包间输出分配的包间编号,如果没有则输出“没有适合第x组家庭的包间”。 解答如下:
#include<stdio.h>
#define uint unsigned int
int arr[19]={0,20,4,10,6,10,4,0,0,20,5,3,0,5,8,3,4,3,10};
int brr[4]={0,0,0,0};
int crr[19];
int roomflag;
int reference;
int counter=0;
int main(void)
{
printf("请输入4组家庭就餐人数\n");
scanf("%d,%d,%d,%d",&brr[0],&brr[1],&brr[2],&brr[3]);
if(brr[0]!=0&&brr[1]!=0&&brr[2]!=0&&brr[3]!=0)
{
for(uint i=0;i<4;i++)
{
for(uint j=0;j<19;j++)
{
if(arr[j]!=0)
{
if(arr[j]>=brr[i])
{
crr[j]=arr[j]-brr[i];
}
else
{
crr[j]=-1;
}
}
else
{
crr[j]=-2;
}
printf("%d,",crr[j]);
}
printf("\n");
for(uint n=0;n<19;n++)
{
if(crr[n]>0)
{
reference=crr[n];
break;
}
}
for(uint m=0;m<19;m++)
{
if(crr[m]>=0)
{
if(crr[m]>0)
{
if(reference>=crr[m])
{
reference=crr[m];
roomflag=m;
}
}
else
{
roomflag=m;
}
}
else
{
counter++;
}
}
if(counter==19)
{
printf("没有适合第%d组家庭的包间\n",i+1);
arr[roomflag]=0;
roomflag=0;
counter=0;
}
else
{
printf("第%d组家庭请到第%d号包间就餐\n",i+1,roomflag);
arr[roomflag]=0;
roomflag=0;
counter=0;
}
}
}
else
{
printf("输入的家庭人数需大于0,请重新输入!\n");
}
}
请吧友多提改进建议。
|