C言語でProject Euler(プロジェクト・オイラー)に挑戦 > スポンサー広告 > C言語でProject Euler 【Problem17】 その2

    C言語でProject Euler(プロジェクト・オイラー)に挑戦 > Project Euler(プロジェクト・オイラー)【Problem16~Problem20】 > C言語でProject Euler 【Problem17】 その2

    スポンサー広告

    スポンサーサイト

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

    Project Euler(プロジェクト・オイラー)【Problem16~Problem20】

    C言語でProject Euler 【Problem17】 その2

    Project Euler(プロジェクトオイラー)のproblem17
    C言語を使っています。

    私の解き方は C言語でProject Euler 【Problem17】 だったのですが、
    コメントいただいたシーフードさんはまったく違うやり方でしたので、載せさせていただきます


    /* Problem 17 †*/
    1 から 5 までの数字を英単語で書けば/
    one, two, three, four, five であり、
    全部で 3 + 3 + 5 + 4 + 4 = 19 の文字が使われている。

    では 1 から 1000 (one thousand) までの数字を
    すべて英単語で書けば、全部で何文字になるか。

    注: 空白文字やハイフンを数えないこと。
    例えば、342 (three hundred and forty-two) は 23 文字、
    115 (one hundred and fifteen) は20文字と数える。
    なお、"and" を使用するのは英国の慣習。


    #include <stdio.h>
    #include <conio.h>

    //十の位
    int Teath(int number)
    {
        if(number == 0)
            return 0;
        else if(number == 4 || number == 5 || number == 6)
            return 5;
        else if(number == 2 || number == 3 || number == 8 || number == 9)
            return 6;
        else
            return 7;
    }
    //一桁
    int Check1(int number)
    {
        if(number == 0)
            return 0;
        else if(number == 1 || number == 2 || number == 6)
            return 3;
        else if(number == 4 || number == 5 || number == 9)
            return 4;
        else
            return 5;
    }
    //二桁
    int Check2(int number)
    {
        int i, max = 0, k;

        if(number == 11 || number == 12)
            return 6;
        else if(number == 15|| number == 16)
            return 7;
        else if(number == 13 || number == 14 || number == 18 || number == 19)
            return 8;
        else if(number == 17)
            return 9;
        else if(number == 10)
            return 3;
        else{
            for(i = 0;i <= 1;i ++){
                k = number % 10;
                number /= 10;
                if(i == 0)
                    max += Check1(k);
                else
                    max += Teath(k);
            }
        return max;
        }
    }

    //三桁
    int Check3(int number)
    {
        int i, k, max = 0;

        i = number / 100;
        k = number % 100;

        max += Check1(i);
        max += Check2(k);

        if(number % 100 ==0)
            return max + 7;
        else
            return max + 10;
    }

    //桁チェック
    int CheckNumber(int number)
    {
        int flg = 0, i;

        i = number;

        while(i > 0){
            i /= 10;
        flg ++;
        }

        if(flg == 1)
            return Check1(number);
        if(flg == 2)
            return Check2(number);
        if(flg == 3)
        return Check3(number);
    }

    int main(void)
    {
        int i, max = 0;

        for(i = 1;i <= 999;i ++){
            max += CheckNumber(i);
        }

        printf("%d\n",max + 11);
        getch();
        return 0;
    }



    <<解>> 21124

    Project Euler(プロジェクトオイラー)Problem17
    同じC言語を使っても、いろいろな考え方ができるもんですね。

    C言語でProject Euler 【Problem17】



    ☆応援お願いします☆
    にほんブログ村 IT技術ブログ C/C++へ
    にほんブログ村


    <<C言語でProject Euler 【Problem14】C言語でProject Euler(プロジェクト・オイラー)に挑戦C言語でProject Euler 【Problem17】>>

    <<C言語でProject Euler 【Problem14】C言語でProject Euler(プロジェクト・オイラー)に挑戦C言語でProject Euler 【Problem17】>>

    コメント

    • No title
    • 23.シーフード
    • 2011年05月11日 |
    • わーーーーー

      乗せてもらえてなんか光栄です[��ʸ��:v-42]

    • [編集]
    • ほっっっ
    • 24.CEuler
    • 2011年05月15日 |
    • そう言っていただけてよかった~☆
      勝手してスミマセン(*^_^*)
    • [編集]

    コメントする

    トラックバック


    この記事にトラックバックする(FC2ブログユーザー)

    カテゴリ

    最新記事

    WiMAX & WiFi & モバイル

    便利ソフトいろいろ

    最新トラックバック

    最新コメント

    カウンター

    BlogRancking



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