Entry

プログラミングメモ - LL Golf Hole 5 を C で書く

2008年08月17日

やってみた。

与えられた自然数までの数え上げを行います。ただし、繰り上がりが起こったときは最上位の桁のみを数え上げます。また、与えられる自然数には0以外の桁が2回以上登場してはいけません。[例は省略]

LL Golf Hole 5 - 最上位の桁を数え上げる どう書く?org

やってみたんだけど,あまり短くならないなぁ……。クルクル回しすぎだし,変数も無駄遣いしているし。

#include <stdio.h>
#include <string.h>

void
count(int a)
{
    int e, d, i;
    for (e = d = 0; !(a % 10); a /= 10, d = e++);
    while (e--)
        for (i = 1; i <= (e ? 9 : a); i++)
            printf("%d%s\n", i, memset(stdin, 48, d - e));
}

int
main(int argc, char *argv[])
{
    count(300);
    return 0;
}

お題にある Ruby の例では,再帰を使ってるんですけど,C で再帰を使うと却って長くなっちゃう気がします。デフォルトの仮引数を使えたり,文字列と数値を楽に行き来できないと,再帰を使うのはなかなかきつい。個人的には,mattsan さんの増分を変えていく方法が, C/C++ 系では無難できれいな感じがします。

あたしの方法は……あまりやっちゃいけませんね。memset(3) の書き込み先に stdin を間借りしてるんですけど,これってできるんだ。自分でやっててちょっとウケた。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN