パズル

ピアノ問題の一般解(数学ガール: 乱択アルゴリズム)

本の中では(a=8, b=4)の場合だけ検算していますが、それ以外の場合についても確かめるためのプログラムです。"./a.out a b"で実行すると場合の数を返します(a,bは書籍上で定義されているものと同じです)。 ソースコード #include <stdio.h> #include <stdlib.h> #include <string.h> #incl</string.h></stdlib.h></stdio.h>…

甘いもの詰め合わせ(ダイナミック・プログラミング)

プログラマのための論理パズルの解答例です。 "./a.out 1 160"で問題1の解答が、"./a.out 5 160"で問題2の解答が得られます。低性能と言って良いようなPC(netbook)で計算してますが、1問あたり5分以内で計算が終わりました。 ソースコード #include <stdio.h> #includ</stdio.h>…

数独(推論のいる場合)

数独の拘束条件だけでは答えが1つに絞れない場合に対応しているプログラムです。 例 例えば、こんな問題(0は空欄を意味します)は前回のプログラムでは解くことはできませんでしたが、今回のプログラムでは解くことができます。 000 104 870 000 007 400 300 …

数独(推論のいらない場合)

数独を解くプログラムです。少しでも問題が難しいと、解けなくなります。 コード #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> struct State { char c; struct State* right; struct State* down; }; struct State* state(char c) { struct State* s = malloc(s</string.h></assert.h></stdlib.h></stdio.h>…

年齢並べ

プログラマのための論理パズルに掲載されているパズル「年齢並べ」をC言語に解かせてみました。順列の生成のところで、つまってしまって少し凹みました。 コード #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> struct Person { const char* name; int age; struc</assert.h></string.h></stdlib.h></stdio.h>…