BohYoh.comトップページへ

基本情報技術者試験 平成15年度・秋期・午後 問6 ソースプログラム

C言語講座へ  情報処理技術者試験対策講座へ  情報処理技術者試験対策講座(C言語)へ 
/*
    基本情報技術者試験          平成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 &empty;
}