プログラムの実行結果は以下の通り。
Find \ : A B C D A : − グー チョキ パー B : チョキ − パー グー C : パー グー − チョキ D : グー チョキ パー −
CはDにチョキを出して1勝したことが判る。
プログラムのソースは以下の通り。
#include "puzutl.h" #define G 1 // グー #define C 2 // チョキ #define P 3 // パー int gcp[6][3] = { // グー,チョキ,パーの出し方(6通り) {G,C,P}, {G,P,C}, {C,G,P}, {C,P,G}, {P,G,C}, {P,C,G} }; int judge( int x, int y) { if( x == y) return 0; // あいこ if( abs(x-y) == 1) return -(x-y); // 差が1の時は小さい方が勝ち if( abs(x-y) == 2) return (x-y); // 差が2の時は大きい方が勝ち(グーとパー) pe( "ProgramError(x:%d,y:%d)\n"); return 0; } int abcd[4][4]; // 対戦表 cstring sgcp[] = { " − ","グー ","チョキ","パー "}; // 解の出力用 int main( int argc, cstring argv[]) { for( int a=0; a< 6; a++) { abcd[0][1] = gcp[a][0]; abcd[0][2] = gcp[a][1]; abcd[0][3] = gcp[a][2]; for( int b=0; b< 6; b++) { abcd[1][0] = gcp[b][0]; abcd[1][2] = gcp[b][1]; abcd[1][3] = gcp[b][2]; for( int c=0; c< 6; c++) { abcd[2][0] = gcp[c][0]; abcd[2][1] = gcp[c][1]; abcd[2][3] = gcp[c][2]; for( int d=0; d< 6; d++) { abcd[3][0] = gcp[d][0]; abcd[3][1] = gcp[d][1]; abcd[3][2] = gcp[d][2]; //------------------------------------------------------------ // abcd[][] がa,b,c,dがじゃんけんをした結果表になる。 // 勝ち負けを判定する。 //------------------------------------------------------------ if( abcd[0][1] == G && abcd[1][0] == C &&// AはBにグーで勝ち judge( abcd[0][2], abcd[2][0]) > 0 && judge( abcd[0][3], abcd[3][0]) > 0) { // C,Dにも勝ってAは全勝 int bwin = 0; for( int ib=0; ib< 4; ib++) { if( ib != 1 && judge( abcd[1][ib], abcd[ib][1]) > 0) bwin++; } int cwin = 0; for( int ic=0; ic< 4; ic++) { if( ic != 2 && judge( abcd[2][ic], abcd[ic][2]) > 0) cwin++; } int dwin = 0; for( int id=0; id< 4; id++) { //if( id != 3 && judge( abcd[3][id], abcd[id][3]) > 0) dwin++; } if( bwin == 2 && cwin == 1 && dwin == 0) { ps( "Find\n"); ps( "\ : A B C D \n"); for( int x=0; x< 4; x++) { ps( "%.2s : ", "ABCD"+2*x); for( int y=0; y< 4; y++) { ps( "%s ", sgcp[abcd[x][y]]); } ps( "\n"); } } } } } } } return 0; }