下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
#include "stdafx.h"
#include
#include
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%.0f\n",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%.0f\n",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;
}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
总结
以上是编程之家为你收集整理的C语言版的算24游戏代码全部内容,希望文章能够帮你解决C语言版的算24游戏代码所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!