基本情報技術者試験 平成15年度・秋期・午後 問6 ソースプログラム
/*
基本情報技術者試験 平成15年度・秋期・午後 問6
BohYoh Shibata PREPARATION
*/
#define MAXNUM 30 /* 列の最大座席数 */
#define ROWNUM 26 /* 列数 */
typedef struct {
char row; /* 座席の列名 */
int no; /* 座席の番号 */
} SEAT;
static char rname[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
status[ROWNUM][MAXNUM];
static int cnum[ROWNUM] = {12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 30, 30,
30, 30, 30, 30, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12};
static SEAT empty;
SEAT *book_seat(int);
SEAT *book_seat(int number)
{
int ridx, cidx, eidx, flg = 0;
for (ridx = 0; ridx < ROWNUM; ridx++) {
for (cidx = 0; cidx <= cnum[ridx] - number; cidx++) {
if (status[ridx][cidx] == ' ') {
flg = 1 ;
for (eidx = cidx + number - 1; cidx < eidx; eidx--)
if (status[ridx][eidx] == 'R') {
flg = 0;
break;
}
if (flg == 1) break;
}
}
if (flg == 1) break;
}
if (flg == 0)
return NULL;
for (eidx = cidx + number - 1; cidx <= eidx; eidx--)
status[ridx][eidx] = 'R';
empty.row = rname[ridx] ;
empty.no = cidx + 1 ;
return ∅
}