C言語関係掲示板

過去ログ

No.481.1〜9の間に+,-を入れて、合計が100になるような式

[戻る] [ホームページ]
No.3515

Cの難問。解けたら賢くなるかも。
投稿者---ルシルフル(2002/11/20 12:08:48)


1,2,3,4,5,6,7,8,9の間に+,-のどちらかを入れて、合計が100になるような式を全て求めよ。例えば123-45-67+89=100であり

No.3518

Re:Cの難問。解けたら賢くなるかも。
投稿者---かずま(2002/11/20 18:22:35)


> 1,2,3,4,5,6,7,8,9の間に+,-のどちらかを入れて、合計が100に
> なるような式を全て求めよ。例えば123-45-67+89=100であり
#include <stdio.h>

int calculate(const int *op)
{
    int i, v = 0, x = 1, p = 1;

    for (i = 1; i <= 9; i++)
        if (op[i])
            v += x * p, x = i+1, p = op[i];
        else
            x = x * 10 + (i+1);
    return v;
}

int main()
{
    static char *sym[] = { " - ", "", " + " };
    int i, op[] = { 0,-1,-1,-1,-1,-1,-1,-1,-1,1 };

    do {
        if (calculate(op) == 100) {
            for (i = 1; i < 9; i++)
                printf("%d%s", i, sym[op[i]+1]);
            printf("9 = 100\n");
        }
        for (i = 1; i < 9 && ++op[i] > 1; i++)
            op[i] = -1;
    } while (i < 9);
    return 0;
}