« DJ TROOPERS | メイン | KURO-BOX/PRO »
2008年11月16日
sandglass
昨日は午後から事務所に行って、新人に教えるJavaの勉強会を見物してた。
for文とか配列を教えてたみたい。
うちが勉強会を見に行く目的は
・新人の♀の子を見に行く
・講師役の自分の先輩さんや後輩さんの教えっぷりを見に行く
この2つ。
教えに行ってるわけじゃないし、なんか聞かれても教えるのヘタだから困っちゃうんだけど、1個だけ質問をされてしまった。
聞かれたのは、for文を使った練習問題の解き方。「for文を使ってコンソールに図形を出力しなさい」っていうありがちな練習問題で、今回出力する図形は・・・
こんなの。中抜きの四角+バツ印+砂時計のように上下の三角を塗りつぶす、というめんどい形。
新人さんがやるにはちょっとムズイようなー?うちもどうやって実装するのがいいんだろう?って考えちゃったよね。で、帰ってからちょっと組んでみた。うちにはJavaの開発環境がないからCで書いちゃったし。
// 20081115.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int max = 10;
int min = 1;
int x;
int y;
char pen;
const char black = '*';
const char white = ' ';
// 縦移動
for (y = min; y <= max; y++) {
// 横移動
for (x = min; x <= max; x++) {
// 最初と最後の行は全て塗る
if (y == min || y == max) {
pen = black;
}
// 右端と左端は必ず塗る
else if (x == min || x == max) {
pen = black;
}
// 斜線1(左上から右下へ)
else if (x == y) {
pen = black;
}
// 斜線2(右上から左下へ)
else if (x == (max + 1) - y) {
pen = black;
}
// 斜線1と2の間(上半分)
else if (x > y && x < (max + 1) - y) {
pen = black;
}
// 斜線1と2の間(下半分。※下半分は斜線2<斜線1になる)
else if (x > (max + 1) - y && x < y) {
pen = black;
}
// 他は空白
else {
pen = white;
}
// 1マス塗る
printf("%c", pen);
}
// 行末には改行を忘れずに
printf("\n");
}
// 正常終了
return 0;
}
あんまイケてない気がするなぁ。右からx番目を表す(max + 1) - yとかはもっとスマートな書き方ができると思うんだけど、どうやって書くのがいいんかねぇ?
投稿者 txdrum : 2008年11月16日 02:05