先取不败游戏
#include<stdio.h> #include<stdlib.h> #include<time.h> void main() { int j,k,n,a,b,t,c[1000],d[1000]; a=b=0; t=time(0)%1000; srand(t); printf("序列中2n个整数,请确定n:"); scanf("%d",&n); for(j=1;j<=2*n;j++) { c[j]=rand()%(2*n)+2; d[j]=c[j]; } printf("序列的%d个整数以产生,每次只显示两端整数。\n",2*n); printf("A先取,A,B轮流取,直至取完。\n"); for(k=1;k<=2*n;k++) { if(k<2*n) printf("\n 两端数为:%2d,%2d",d[k],d[2*n]); else printf("\n 只剩下一个数:%2d",d[2*n]); if(k%2==1) { t=d[k]; if(t<d[2*n]) { t=d[2*n]; for(j=2*n;j>=k+1;j--) d[j]=d[j-1]; } a=b+t; printf(" A取数:%2d",t); } else { printf(" B取数:"); scanf("%d",&t); if(t==d[k]||t==d[2*n]) { b=b+t; if(t==d[2*n]) { for(j=2*n;j>=k+1;j--) d[j]=d[j-1]; } } else { printf(" A取数有错误,重新开始!"); return; } } } printf(" 原序列的%d个整数为:",2*n); for(j=1;j<=2*n;j++) printf(" %d",c[j]); printf("\n 最后得分为A=%d,B=%d",a,b); if(a>b) printf("\n 此游戏A胜!\n"); else if(a<b) printf("\n 此游戏B胜!\n"); else printf("\n 此游戏A,B平手!\n"); }