スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ぱぱっとプログラムを書けるか?

ネットサーフィンをしていたら「プログラマの能力」という単語が目に入った。
仮にも、情報系大学でプログラミングをやっている身である。やはり気になって、ページを覗いてみた。
こちらがそのページ「http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

このページでも紹介されているが、プログラマの実力を試すものとして有名なものには「FizzBuzz問題」がある。
ページにも記載されているとおり、この問題は次のようなもの。

「1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること」

優秀なプログラマはこれを2分で解けるそうだが、殆どの人は解くことができないだとか。
「ぇ!? そんなに難しいのか!?」と思って、早速プログラムを書いてみた。

for(i = 0; i <= 100; i++){
if(i % 3 == 0)
{
if(i % 5 == 0) printf("FizzBuzz\n");
else printf("Fizz\n");
}
else if(i % 5 == 0){ printf("Buzz\n");}
else {printf("%d\n",i);}
}



直感的に書いたら、動いた。というか、2分とは言わずとも数分では書けた。
どうやら、プログラマとしてのスタートラインには立てているみたいです。
ふぅ・・・安心。
もちろん、他に方法はあると思いますし、綺麗な書き方があるとも思いますが、それはさておき。

この問題がすぐに解けたため、調子に乗って他のサイト様の問題に挑戦してみた。
問題を頂いたサイト様「http://blogs.wankuma.com/mcat/archive/2008/07/17/149236.aspx

問題とは、次のようなもの。
「与えられた自然数(0を含む)が2のべき乗数か否か判定し、そのbooleanを返すインターフェイス isAPo2 を作成せよ」

早速、この問題も解いてみた。
プログラムは下記のようになった。

bool isAPo2(int num)
{
int check = 1;
if(num < 0){ return false; }
while(num > check){check= check << 1;}
return (num&check) > 0;
}



わざわざ2を割っていくのは面倒だなー、なんか良い手段ないかなー
と思ったら、ビット演算を上手く使ったら階乗が上手く実現出来てるんじゃね? と気づき、実装してみた。
うん、上手く動いてるっぽい。

他に「こんな解法あるよ!」と言う方がいらっしゃったら、是非教えてください・x・!
スポンサーサイト

コメント

Secret

プロフィール

朔夜だったり、シェルジュだったり

Author:朔夜だったり、シェルジュだったり
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。