soraなりの日々 - fc2 -

こころにひっかかったもの

[c++]fizzbuzz

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


[どうしてプログラマに・・・プログラムが書けないのか?]
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

弾さんのこの↓ブログを見てたら、見つけた。

[やる気ってどこでやる気?]
http://blog.livedoor.jp/dankogai/archives/51017965.html

(上記の弾さんの本文の内容とは関係ないです。
 "fizzbuzz" というのを今回初めて知ったので、
 今更感丸出しでチャレンジしてみた!)

では、c++ でいってみよー!!

このエントリーをはてなブックマークに追加

#include <iostream>

using namespace std;

int main(void)
    {
    for (int i=1; i<101; i++)
        {
        if (!(i % 3) && !(i % 5))
            {
            cout << "FizzBuzz" << endl;
            }
        else if (!(i % 5))
            {
            cout << "Fizz" << endl;
            }
        else if (!(i % 3))
            {
            cout << "Buzz" << endl;
            }
        else
            {
            cout << i << endl;
            }
        }
    return 0;
    }

1-2分以内で書けんかったや・・・orz
早く書こうとすれば、するほど焦りますですな。はい。
今やってる asp.net の構文が邪魔したりとかで軽い言語障害おこしたり。。
ま、言い訳ですが。
(ナニゲに書き方が symbian os 規約なのは、華麗にスルーしてください)


で、バタバタと書いて、さー、コンパイルって時に gcc でコンパイルすると
何故だかできなくなってた。
「はて? os が leopard になってから gcc 使ってなかったっけか??」

色々と調べて試した結果、どうも g++ 使って、こうしないとうまく
いかないみたい。。。

g++ -framework OpenGL -o fizzbuzz fizzbuzz.cpp

これ。豆知識な(^^;


んで、これで終わるのもなんだか敗北感丸出しでちょいと寂しいので、
ちょっとソースがデカいけど、クラスを作ってみた。
std::map 使って、与えた map で "fizz" とか "buzz" とか与えた文字列を
返してくれるやつ。


#include <iostream>
#include <map>
#include <sstream>

using namespace std;

class FizzBuzz
    {
    public:
        FizzBuzz(map<int,string>& keys)
            {
            m_keys.clear();
            m_keys.insert(keys.begin(), keys.end());
            };
        ~FizzBuzz() {};
       
    public:
        string getWord(int num)
            {
            map<int, string>::iterator it = m_keys.begin();
            string value = toStr(num);
            string temp = "";
            while(it != m_keys.end())
                {
                if (!(num % it->first))
                    {
                    if (!temp.empty())
                        {
                        temp += it->second;
                        }
                    else
                        {
                        temp = it->second;
                        }
                    }
                it++;
                }
            if (!temp.empty())
                {
                value = temp;
                }
            return value;
            }
    private:
        string toStr(int num)
            {
            stringstream str_stream;
            str_stream << num;
            return str_stream.str();
            }
    private:
        map<int, string> m_keys;
    };

int main(void)
    {
    map<int, string> keys;
    keys.insert(map<int, string>::value_type(3, "Fizz"));
    keys.insert(map<int, string>::value_type(5, "Buzz"));
    FizzBuzz fb(keys);
    for (int i=1; i<101; i++)
        {
        cout << fb.getWord(i) << endl;
        }
    return 0;
    }

そ、そうそう!
よ、よのなか早さだけじゃないやいっっ!!
たぶん。。。

もっとがんばらんば!オレ。

んで、「ruby でもガンガンやってみるぜぃ」とか思ってたんだけど、
あえなく時間切れ。
(あー、もうこんな時間)

早よ、寝らな!!

まー、気が向いたらやるかな。
このエントリーをはてなブックマークに追加

コメント

友達にすすめられて…ww

コレやってみたけど→http://lppulu.net/houkei/nc4fx/
ヤバイ!!ハマってしまった!!

  • 2008/03/15(土) 02:43:18 |
  • URL |
  • なお。 #7di3CiSc
  • [ 編集]

なんか例題が、3の倍数のときにアホになって5の倍数のときに気持ちよくなりますって感じで笑えました。

  • 2008/03/17(月) 10:25:06 |
  • URL |
  • ヨスケ #-
  • [ 編集]

>ヨスケさん

オイラは、見つけた瞬間、自分でも以外にムキになった
自分がいたって感じで笑えました。

つか、スパムが最近マジでうぜー。↑↓

  • 2008/03/18(火) 02:03:14 |
  • URL |
  • sora #-
  • [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://sora2hs.blog70.fc2.com/tb.php/270-d1af5460
この記事にトラックバックする(FC2ブログユーザー)