kmjp's blog

競技プログラミング参加記です

UnKoder #05 : Print Cuboid

3問目までは順調だったのにね。
https://www.hackerrank.com/contests/unkoder-05/challenges/print-cuboid

問題

整数W,H,Dが与えられる。
幅W*高さH*奥行Dの立方体をサンプルに従い出力せよ。

解法

色々な考え方ができる。
自分は、角7点の座標を求めて'+'を描いたのち、

  • 長さWの横棒3本
  • 長さHの縦棒3本
  • 長さDの斜め棒3本

を順に描いた。

周りも似た解答だったようだ。

char hoge[30][30];

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	int W,H,D;
	cin>>W>>H>>D;
	FOR(y,25) FOR(x,25) hoge[y][x]=' ';
	
	hoge[0][D+1]='+';
	hoge[0][D+1+W+1]='+';
	hoge[H+1][D+1+W+1]='+';
	hoge[D+1][0]='+';
	hoge[D+1][W+1]='+';
	hoge[D+2+H][0]='+';
	hoge[D+2+H][W+1]='+';
	
	FOR(x,W) hoge[0][D+2+x]=hoge[D+1][1+x]=hoge[D+2+H][1+x]='-';
	FOR(y,H) hoge[1+y][W+D+2]=hoge[D+2+y][0]=hoge[D+2+y][W+1]='|';
	FOR(i,D) hoge[D-i][i+1]=hoge[D-i][i+1+W+1]=hoge[D-i+H+1][i+1+W+1]='/';
	
	FOR(y,3+D+H) cout<<hoge[y]<<endl;
}

まとめ

ちょっと頭をひねる愚直実装問題。