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】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
