📄 booking.cpp
字号:
// booking.cpp : Defines the entry point for the console application.
//
#include "StdAfx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int g_seat[80]; // 1表示座位为空,0表示座位已售出
int g_remain = 80; // 剩余座位数
bool GetRequest(int *p);
int AssignTickets(int nTickets, int *SeatNum); // 分配座位票
void OutputResult(int * SeatNum, int Count);
int main()
{
int i;
int nTickets = 0;
int SeatNum[80];
// 初始化所有座位为空
for(i = 0; i < 80; i++)
{
g_seat[i] = 1;
}
while(GetRequest(&nTickets))
{
if (nTickets >= g_remain)
{
// 剩余座位不足
printf("剩余座位不足\n");
}
else
{
// 分配座位票
nTickets = AssignTickets(nTickets, SeatNum);
OutputResult(SeatNum, nTickets);
}
}
return 0;
}
bool GetRequest(int *p)
{
static FILE* fp = fopen("d:\\request.txt","r");
static int nIndex = 0;
static int inputData[80] = {0};
static bool isfirst = true;
int i;
if(isfirst){
for(i = 0; i < 80; i++){
if(fscanf(fp,"%d,",&inputData[i]) == EOF) break;
}
isfirst = false;
fclose(fp);
}
if(inputData[nIndex] == 0 || nIndex == 80) return false;
*p = inputData[nIndex++];
return true;
}
int AssignTickets(int nTickets, int *SeatNum)
{
int i;
int nCount = 0;
switch(nTickets)
{
case 2 :
for(i = 0; i < 80; i += 2)
{
if ((g_seat[i] == 1) && (g_seat[i+1] == 1))
{
// 相邻座位号的座位未售出
g_seat[i] = 0;
g_seat[i+1] = 0;
SeatNum[nCount++] = i + 1;
SeatNum[nCount++] = i + 2;
break;
}
}
break;
case 3 :
case 4 :
{
int k = 6;
for(i = 0; i < 80; i += k)
{
k = 8 - k;
if ((g_seat[i] + g_seat[i+1] + g_seat[i+4] + g_seat[i+5]) >= nTickets)
{
// 同一间隔内的座位数满足要求的座位数
if ((g_seat[i] == 1) && (nCount < nTickets))
{
g_seat[i] = 0;
SeatNum[nCount++] = i + 1;
}
if ((g_seat[i+1] == 1) && (nCount < nTickets))
{
g_seat[i+1] = 0;
SeatNum[nCount++] = i + 2;
}
if ((g_seat[i+4] == 1) && (nCount < nTickets))
{
g_seat[i+4] = 0;
SeatNum[nCount++] = i + 5;
}
if ((g_seat[i+5] == 1) && (nCount < nTickets))
{
g_seat[i+5] = 0;
SeatNum[nCount++] = i + 6;
}
break;
}
}
}
break;
default :
break;
}
if (nCount == 0)
{
// 如果相邻或同一间隔的要求得不到满足的话,那么随意售出要求的座位
for(i = 0; (i < 80) && (nCount < nTickets); i++)
{
if (g_seat[i] == 1)
{
g_seat[i] = 0;
SeatNum[nCount++] = i + 1;
}
}
}
// 售出座位以后,剩余的座位数相应减少
g_remain -= nCount;
// 返回实际售出的座位数
return nCount;
}
void OutputResult(int * SeatNum, int Count)
{
FILE* fp = fopen("d:\\result.txt","a");
int i;
fprintf(fp,"====================================\n");
for(i = 0; i < Count; i++)
{
fprintf(fp,"%d,",SeatNum[i]);
}
fprintf(fp,"\n");
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -