プログラムの実行結果は以下の通り。
Find 2 3 4 5 6 7 2 × ○ ○ ○ ○ × 3 ○ × ○ ○ × ○ 4 ○ ○ × × ○ ○ 5 ○ ○ × × ○ ○ 6 ○ × ○ ○ × ○ 7 × ○ ○ ○ ○ ×
図示すると以下の通り。
判りやすく図示すると以下の通り。
プログラムのソースは以下の通り。
#include "puzutl.h" int val[6] = { 2, 3, 4, 5, 6, 7}; int mat[6][6]; void dump() { int row, col; ps( " "); for( col=0; col< 6; col++) { ps( "%2d ", val[col]); } ps( "\n"); for( row=0; row< 6; row++) { ps( "%2d ", val[row]); for( col=0; col< 6; col++) { if( mat[row][col]) { ps( " ○ "); } else { ps( " × "); } } ps( "\n"); } } void check18() { int sum = 0; for( int row=0; row< 6; row++) { sum = 0; for( int col=0; col< 6; col++) { if( mat[row][col]) sum += val[col]; } if( sum != 18) return; } ps( "Find\n"); dump(); } int main( int argc, cstring argv[]) { mat[0][0] = mat[1][1] = mat[2][2] = mat[3][3] = mat[4][4] = mat[5][5] = 0; for( int i=0; i<= 0x7FFF; i++) { if( i&0x0001) mat[0][1] = mat[1][0] = 1; else mat[0][1] = mat[1][0] = 0; if( i&0x0002) mat[0][2] = mat[2][0] = 1; else mat[0][2] = mat[2][0] = 0; if( i&0x0004) mat[0][3] = mat[3][0] = 1; else mat[0][3] = mat[3][0] = 0; if( i&0x0008) mat[0][4] = mat[4][0] = 1; else mat[0][4] = mat[4][0] = 0; if( i&0x0010) mat[0][5] = mat[5][0] = 1; else mat[0][5] = mat[5][0] = 0; if( i&0x0020) mat[1][2] = mat[2][1] = 1; else mat[1][2] = mat[2][1] = 0; if( i&0x0040) mat[1][3] = mat[3][1] = 1; else mat[1][3] = mat[3][1] = 0; if( i&0x0080) mat[1][4] = mat[4][1] = 1; else mat[1][4] = mat[4][1] = 0; if( i&0x0100) mat[1][5] = mat[5][1] = 1; else mat[1][5] = mat[5][1] = 0; if( i&0x0200) mat[2][3] = mat[3][2] = 1; else mat[2][3] = mat[3][2] = 0; if( i&0x0400) mat[2][4] = mat[4][2] = 1; else mat[2][4] = mat[4][2] = 0; if( i&0x0800) mat[2][5] = mat[5][2] = 1; else mat[2][5] = mat[5][2] = 0; if( i&0x1000) mat[3][4] = mat[4][3] = 1; else mat[3][4] = mat[4][3] = 0; if( i&0x2000) mat[3][5] = mat[5][3] = 1; else mat[3][5] = mat[5][3] = 0; if( i&0x4000) mat[4][5] = mat[5][4] = 1; else mat[4][5] = mat[5][4] = 0; check18(); } return 0; }