C语言版的算24游戏代码
发布时间:2020-12-16 07:43:34 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #include "stdafx.h"#include stdio.h#include stdlib.h double sum(double a,double b){ return a+b;}double mi(double a,double b){ return a-b;}do
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #include "stdafx.h" #include <stdio.h> #include <stdlib.h> double sum(double a,double b) { return a+b; } double mi(double a,double b) { return a-b; } double mul(double a,double b) { return a*b; } double di(double a,double b) { return a/b; } double (*ops[4])(double a,double b)={sum,mi,mul,di}; double num[4];/*输入的数*/ double num3[4];/*第二次运算时暂时保存*/ double num4[4];/*第一次运算时暂时保存*/ double numf[4];/*输入的数保存输出时候用*/ /*复制数组*/ void copyarr(double *src,double *des) { int i; double t[4]; for(i=0;i<4;i++) des[i]=src[i]; } /*第一次计算后,合并为前三个数*/ void reorder4(int cp4,double re4) { switch(cp4) { case 0: num[0]=re4; num[1]=num[2]; num[2]=num[3]; break; case 1: num[1]=re4; num[2]=num[3]; break; case 2: num[2]=re4; break; } } /*第二次计算后,合并为两个数*/ void reorder3(int cp3,double re3) { switch(cp3) { case 0: num[0]=re3; num[1]=num[2]; break; case 1: num[1]=re3; break; } } /*根据运算得到操作符*/ char opc(double(*opt)(double a,double b)) { if(opt==sum) return '+'; else if(opt==mi) return '-'; else if(opt==mul) return '*'; else if(opt==di) return '/'; } /*输出*/ void printresult(double *num,int ta3,int ta4,double(*op2)(double a,double b),double(*op3)(double a,double(*op4)(double a,double b)) { double n0=num[0]; double n1=num[1]; double n2=num[2]; double n3=num[3]; switch(ta4) { case 0: if(ta3==0) printf("((%.0f%c%.0f)%c%.0f)%c%.0fn",n0,opc(op4),n1,opc(op3),n2,opc(op2),n3); else if(ta3==1) printf("(%.0f%c%.0f)%c(%.0f%c%.0f)n",n3); break; case 1: if(ta3==0) printf("(%.0f%c(%.0f%c%.0f))%c%.0fn",n3); else if(ta3==1) printf("%.0f%c((%.0f%c%.0f)%c%.0f)n",n3); break; case 2: if(ta3==0) printf("(%.0f%c%.0f)%c(%.0f%c%.0f)n",n3); else if(ta3==1) printf("%.0f%c(%.0f%c(%.0f%c%.0f))n",n3); break; } } int main(void) { int a,b,c,d;/*输入的数*/ int cp3,cp4;/*cp3,cp4分别是第二次和第一次运算时的两个数运算,前一个数所在的位置*/ int i,j,k;/*循环各种运算*/ double re2,re3,re4;/*第3,2,1次运算的结果*/ double(*cop2)(double a,double b);/*第3次操作符*/ double(*cop3)(double a,double b);/*第2次操作符*/ double(*cop4)(double a,double b);/*第1次操作符*/ scanf("%d%d%d%d",&a,&b,&c,&d); num[0]=(double)a; num[1]=(double)b; num[2]=(double)c; num[3]=(double)d; /*每次运算之前备份,运算后合并以供后面的运算,但是如果没有找到解必须恢复备份*/ copyarr(num,numf); copyarr(num,num4); for(cp4=0;cp4<=2;cp4++) { for(i=0;i<4;i++) { cop4=ops[i]; re4=(*cop4)(num[cp4],num[cp4+1]); reorder4(cp4,re4); copyarr(num,num3); for(cp3=0;cp3<=1;cp3++) { for(j=0;j<4;j++) { cop3=ops[j]; re3=(*cop3)(num[cp3],num[cp3+1]); reorder3(cp3,re3); for(k=0;k<4;k++) { cop2=ops[k]; re2=(*cop2)(num[0],num[1]); if(re2==24) { printresult(numf,cp3,cp4,cop2,cop3,cop4); system("pause"); return 0; } } copyarr(num3,num); } } copyarr(num4,num); } } system("pause"); return 0; } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |