C言語による入居者数の管理です。
公舎の入居・退去の情報から、各部屋の入居者数を出力するプログラムです。
・問題
A大学は1フロア10部屋、3階建ての公舎4棟を管理しています。
公舎の入居・退去の情報を読み込み、各部屋の入居者数を出力するプログラムを作成して下さい。
n件の情報が与えられます。
各情報では、4つの整数b, f, r, vが与えられます。
これは、b棟f階のr番目の部屋にv人が追加で入居したことを示します。
vが負の値の場合、-v人退去したことを示します。
最初、全ての部屋には誰も入居していないものとします。
・入力される値
最初の行に情報の数 n が与えられます。
続いて n 件の情報が与えられます。
各情報には4つの整数 b, f, r, v が空白区切りで1行に与えられます。
・期待する出力
4棟について入居者数を出力して下さい。
各棟について、1階、2階、3階の順に入居者数を出力します。
各階については、1番目、2番目、・・・、10番目の部屋の入居者数を順番に出力します。
入居者数の前には1つの空白を出力して下さい。
また、各棟の間には####################(20個の#)で区切って下さい。
・条件
間違った棟番号・階・部屋番号は与えられない。
管理の過程で1部屋の入居者数が0より少なくなることはない。
管理の過程で1部屋の入居者数が9より多くなることはない。
僕が作成、提出したコードは、以下のとおりです。
/* ITP1_6_C : Official House http://judge.u-aizu.ac.jp/ C言語による入居者数の管理 https://neguse-atama.hatenablog.com */ #include<stdio.h> #include<string.h> int main(void){ int n,i,j,b,f,r,v; char house[4][3][32] = {0}; for (i = 0; i < 4; i++){ for (j = 0; j < 3; j++){ strcpy(house[i][j], " 0 0 0 0 0 0 0 0 0 0"); } } scanf("%d",&n); while (n-->0){ scanf("%d %d %d %d", &b, &f, &r, &v); house[b-1][f-1][r*2-1]+=v; } for (i=0;i<4;i++){ for (j=0;j<3;j++){ puts(house[i][j]); } if (i < 3){ printf("####################\n"); } } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
ITP1_6_C : Official House