greenteaの日記: FizzBazz問題 4
http://blog.livedoor.jp/clausemitz/archives/50656033.html
http://blog.livedoor.jp/clausemitz/archives/50656193.html
/.内でも、つい最近見たような気がするけど、FizzBazz問題。
ある程度はプログラム書ける人のつもりだったし、できましたよ。そりゃ。
でもなぁ……
%使わずにする方法でまず思いついたのが
void fizzbazz(void)
{
int i;
struct foo{
int b;
struct foo *p;
} fizz[3], bazz[5], *fizzp = fizz, *bazzp = bazz;
for(i=0;i<2;i++) fizz[i].b = 0, fizz[i].p = &fizz[i+1];
fizz[2].b = 1, fizz[2].p = &fizz[0];
for(i=0;i<4;i++) bazz[i].b = 0, bazz[i].p = &bazz[i+1];
bazz[4].b = 1, bazz[4].p = &bazz[0];
for(i=1;i<=100;i++){
if(fizzp->b && bazzp->b) printf("Fizz Bazz");
else if(fizzp->b) printf("Fizz");
else if(bazzp->b) printf("Bazz");
else printf("%d", i);
if(i < 100) printf(",");
fizzp = fizzp->p;
bazzp = bazzp->p;
}
printf("\n");
}
もうちょっと、物事を簡単に考える能力が必要みたいですorz
ややこし (スコア:1)
お手上げ(笑)
clausemitz
Re:ややこし (スコア:1)
3まで行ったら最初に戻るって、どうしよ……と悩んで
簡単な問題をわざわざ線形リストで作ってしまうあたり、
出題者の罠にはまってるんでしょうかねぇorz
そうだよね、clausemitzさんみたいにすりゃ、もっと簡単だよね……
非常に勉強になりました
1を聞いて0を知れ!
折角%のifをなくしたのだから (スコア:1)
if文なくなると思いますよ
#線形リストはナルホドです
Re:折角%のifをなくしたのだから (スコア:1)
わざわざ構造体作って、0と1しか入れてないし……
実は、どうせならもっと複雑怪奇に、構造体やめてvoid*配列を用意して
同じようなことしようかとも考えたりしましたが……
void *afizz[3], *fizz = &afizz[2], *pfizz = afizz;
afizz[0] = &afizz[1];afizz[1] = afizz[2];afizz[2] = afizz[0];
if(pfizz == fizz) printf("fizz");
pfizz = *pfizz;
……ほんとに動くのかしら?
1を聞いて0を知れ!