1. 程式人生 > >從鍵盤輸入4個0-13之間的正整數實現24點遊戲並寫入檔案中

從鍵盤輸入4個0-13之間的正整數實現24點遊戲並寫入檔案中

程式碼如下:

include<stdio.h>

include <stdlib.h>

include <time.h>

FILE * fp;

void main() { void play(); //宣告函式 fp=fopen(“Gamereport.txt”,“wb”); printf(" *** | 歡迎使用24點遊戲! | ***\n\n"); play();

} //定義play()函式 void play() { int k,i,j,x=0,y=0,s[3],m,n,c,q,f=0,e,p[4],l;//p[4]陣列存放輸出時的四個運算數, //s[3]分別存放運算結果 int a[4],newp[4],b[4]={1,2,3,4};//a[4]陣列存放輸入的四個數 char p1[3],sign; //定義儲存運算子的字元陣列 printf(" 請輸入四個數:"); for(i=0;i<4;i++) { scanf("%d",&a[i]); //輸入4個數 } printf("\n"); for(l=0;l<sizeof(a)/sizeof(a[0]);l++){ if(a[i]<=0||a[i]>=13){ printf(“輸入有誤,請輸入4個0-13內的數字!”); break; } else{ for(i=0;i<3;i++) { k=i+1; for(n=1;n<=(3-i)*4;n++) { if(((n-1)%4)==0&&n!=1) k++; switch(b[x]) //兩個數進行運算 { case 1:s[0]=a[i]+a[k];sign=’+’;break; case 2:s[0]=a[i]-a[k];sign=’-’;break; case 3:s[0]=a[i]a[k];sign=’

’;break; case 4:s[0]=a[i]/a[k];sign=’/’;break; } if((x=n%4)==0&&a[i]%a[k]!=0&&a[k]%a[i]!=0||a[k]==0||a[i]0) //當除數是0時退出 continue; if(n%40&&a[k]%a[i]==0) { p[0]=a[k];p1[0]=sign;p[1]=a[i]; } //滿足條件就交換順序 else { p[0]=a[i];p1[0]=sign;p[1]=a[k];} for(e=0;e<4;e++) //找出其餘兩個數 { if(e!=i&&e!=k) { f++; newp[f]=a[e]; } } newp[0]=s[0]; newp[3]=newp[1]; //存放第一次兩個數的運算和與剩下兩個數 for(j=0;j<2;j++) { q=j+1; for(m=1;m<=(2-j)*4;m++) { if(((m-1)%4)==0&&m!=1) q++; switch(b[y]) { case 1:s[1]=newp[j]+newp[q];sign=’+’;break; case 2:s[1]=newp[j]-newp[q];sign=’-’;break; case 3:s[1]=newp[j]newp[q];sign=’
’;break; case 4:s[1]=newp[j]/newp[q];sign=’/’;break; } if((y=m%4)==0&&newp[j]%newp[q]!=0&&newp[q]%newp[j]!=0||newp[j]0||newp[q]0) continue; else if(m%40&&newp[q]%newp[j]0) s[1]=newp[q]/newp[j]; if(j0) { p1[1]=sign; p[2]=newp[q]; for(c=0;c<4;c++) { switch(b[c]) { case 1:s[2]=s[1]+newp[q+1];sign=’+’;break; case 2:s[2]=s[1]-newp[q+1];sign=’-’;break; case 3:s[2]=s[1]newp[q+1];sign=’
’;break; case 4:s[2]=s[1]/newp[q+1];sign=’/’;break; } if(c
3&&s[1]%newp[q+1]!=0&&newp[q+1]%s[1]!=0||newp[q+1]==0||s[1]0) continue; else if(c3&&newp[q+1]%s[1]==0) s[2]=newp[q+1]/s[1]; if(s[2]==24) { p1[2]=sign; p[3]=newp[q+1]; if((m%4)==0&&newp[q]%newp[j]0&&c3&&newp[q+1]%s[1]==0) //控制輸出順序和運算優先順序 printf("(%d%c(%d%c(%d%c%d)))=%d\n",p[3],p1[2],p[2],p1[1],p[0],p1[0],p[1],s[2]); else if((m%4)==0&&newp[q]%newp[j]0&&c3&&s[1]%newp[q+1]==0) printf("(%d%c(%d%c%d))%c%d=%d\n",p[2],p1[1],p[0],p1[0],p[1],p1[2],p[3],s[2]); else if((m%4)==0&&newp[j]%newp[q]0&&c3&&newp[q+1]%s[1]0) printf("%d%c((%d%c%d)%c%d)=%d\n",p[3],p1[2],p[0],p1[0],p[1],p1[1],p[2],s[2]); else printf("(((%d%c%d)%c%d)%c%d)=%d\n",p[0],p1[0],p[1],p1[1],p[2],p1[2],p[3],s[2]); } } } if(j1) { if((m%4)==0&&(newp[q]%newp[j]!=0)&&(newp[j]%newp[q]!=0)||((newp[j]==0||newp[q]0)&&s[0]!=24)) continue; else { if(m%40&&newp[q]%newp[j]0) //滿足條件就交換順序 { p[2]=newp[q]; p1[1]=sign; p[3]=newp[j]; } else { p[2]=newp[j]; p1[1]=sign; p[3]=newp[q]; } } for(c=0;c<4;c++) { switch(b[c]) { case 1:s[2]=s[1]+s[0];sign=’+’;break; case 2:s[2]=s[1]-s[0];sign=’-’;break; case 3:s[2]=s[1]s[0];sign=’’;break; case 4:s[2]=s[1]/s[0];sign=’/’;break; } if(c3&&s[1]%s[0]!=0&&s[0]%s[1]!=0||s[0]==0||s[1]0) break; else if(c3&&s[0]%s[1]==0) s[2]=s[0]/s[1]; if(s[2]24) { p1[2]=sign; if(c3&&s[0]%s[1]==0) //控制輸出順序和運算優先順序 { printf("(%d%c%d)%c(%d%c%d)=%d\n",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]); fprintf(fp,"(%d%c%d)%c(%d%c%d)=%d",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]); } else { printf("(%d%c%d)%c(%d%c%d)=%d\n",p[0],p1[0],p[1],p1[1],p[2],p1[2],p[3],s[2]); fprintf(fp,"(%d%c%d)%c(%d%c%d)=%d",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]); } fclose(fp); } } } } } } } } } }