// ■石取りゲーム // 石の山から交互に石を取り、最後に石をとった者が負けです。 // パスはできません。 //  一回に取れる石の最大数をMで指定して下さい。 #include "stdio.h" #define M 3 int maxN(){// 山の石の数の入力。[CTRL]+Zでゲーム終了 int N; printf("\n\n *** 石の数(2以上) ? "); while(scanf("%d",&N)!=EOF) if(N>=2) return N; return 0; } int getStone(int N){// 取る石の数の入力。[CTRL]+Zでキャンセル int X; printf("\n 何個取りますか(1〜%d個) ? ", N < M ? N : M); while(scanf("%d",&X)!=EOF) if(X > 0 && X <= M && X <= N) return X; return 0; } int main(){ int N; while((N = maxN()) != 0){ do{ int X = (N - 1) % (M + 1);// コンピュータが取る石の数の算定 if(X==0) X=1; printf("\n 私は %d 個の石をとります。", X); N -= X; printf("\n 残りは %d 個です。", N); if(N==0) printf("\n 私の負けです。"); else{// ユーザが取る石の数の入力 if((X=getStone(N))==0){printf("勝負はキャンセルされました");break;} N -= X; printf("\n 残りは %d 個です。", N); if(N==0) printf("\n あなたの負けです。"); } } while(N>0); } }