❶ 用c语言快算24,从1到13任意选四个数字,通过加减乘除算得结果为24,数
#include<stdio.h>
double fun(double a1,double a2,int b) //加减乘除的函数
{switch(b)
{case 0:return (a1+a2);
case 1:return (a1-a2);
case 2:return (a1*a2);
case 3:return (a1/a2);
}
}
void main()
{int i,j,k,l,n,m,r,save[4],flg=1;
double num[4]={1,1,1,1},tem1,tem2,tem3,abc=1111;
char sign[5]="+-*/";
printf("输入四个数:");
for(i=0;i<4;i++) //判断四个数是否满足24点运算
{scanf("%lf",num+i); save[i]=num[i];if(save[i]>13)flg=0;}
if(flg) {
flg=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(j!=i)
{for(k=0;k<4;k++)
if(k!=i&&k!=j)
{for(l=0;l<4;l++)
if(l!=i&&l!=j&&l!=k)
{for(n=0;n<4;n++)
for(m=0;m<4;m++)
for(r=0;r<4;r++)
{tem1=fun(num[i],num[j],n);
tem2=fun(tem1,num[k],m);
tem3=fun(tem2,num[l],r);
if(tem3==24.0) {printf("{(%d%c%d)%c%d}%c%d=24\n",save[i],sign[n],save[j],sign[m],save[k],sign[r],save[l]);return;}
else if(tem3==-24.0) {printf("{%d%c(%d%c%d)}%c%d=24\n",save[k],sign[m],save[i],sign[n],save[j],sign[r],save[l]);return;}
else if(tem3==1.0/24.0) {printf("%d%c{(%d%c%d)%c%d}=24\n",save[l],sign[r],save[i],sign[n],save[j],sign[m],save[k]);return;}
else if(tem3==-1.0/24.0) {printf("%d%c{%d%c(%d%c%d)}=24\n",save[l],sign[r],save[k],sign[n],save[i],sign[m],save[j]);return;}
else
{tem1=fun(num[i],num[j],n);
tem2=fun(num[k],num[l],r);
tem3=fun(tem1,tem2,m);
if(tem3==24.0) {printf("(%d%c%d)%c(%d%c%d)=24\n",save[i],sign[n],save[j],sign[m],save[k],sign[r],save[l]);return;}
}
}
}
}
}
}
if(!flg) printf("
NO
ANSWER\n");
}
❷ C语言程序 算24点
#include<iostream>
using namespace std;
struct operation
{
int x;
int y;
int o;
}op[3];
bool co=false;
void g(int a[],int b[],int n,int i,int j)
{
int x,y;
for(x=0,y=1;x<n;x++)
{
if(x==i||x==j)continue;
b[y++]=a[x];
}
op[4-n].x=a[i];
op[4-n].y=a[j];
}
void f(int a[],int n)
{
int i,j,t,b[4];
if(n==1&&a[0]==24)co=true;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
for(t=1;t<=6;t++)
{
switch(t)
{
case 1:g(a,b,n,i,j);
b[0]=a[i]+a[j];
op[4-n].o=t;
f(b,n-1);
if(co)return;
break;
case 2:g(a,b,n,i,j);
b[0]=a[i]-a[j];
op[4-n].o=t;
f(b,n-1);
if(co)return;
break;
case 3:g(a,b,n,i,j);
b[0]=a[i]*a[j];
op[4-n].o=t;
f(b,n-1);
if(co)return;
break;
case 4:
if(a[j]!=0&&a[i]%a[j]==0)
{
g(a,b,n,i,j);
b[0]=a[i]/a[j];
op[4-n].o=t;
f(b,n-1);
if(co)return;
}
break;
case 5:g(a,b,n,i,j);
b[0]=a[j]-a[i];
op[4-n].o=t;
f(b,n-1);
if(co)return;
break;
case 6:
if(a[i]!=0&&a[j]%a[i]==0&&a[j]>a[i])
{
g(a,b,n,i,j);
b[0]=a[j]/a[i];
op[4-n].o=t;
f(b,n-1);
if(co)return;
}
break;
}
}
}
}
}
void h(int a[],int n,int x,int y,int h)
{
int i,j,b[4];
bool bx=false,by=false;
for(i=0,j=0;i<n;i++)
{
if(a[i]==x&&bx==false)
{
bx=true;
continue;
}
if(a[i]==y&&by==false)
{
by=true;
continue;
}
b[j++]=a[i];
}
for(i=0;i<n-1;i++)a[i+1]=b[i];
a[0]=h;
}
void main()
{
int a[4],i,j;
cout<<"输入4个整数:";
for(i=0;i<4;i++)cin>>a[i];
f(a,4);
if(co)
{
for(i=0;i<3;i++)
{
for(j=0;j<4-i;j++)cout<<a[j]<<" ";
cout<<"\n运算 ";
switch(op[i].o)
{
case 1:cout<<op[i].x<<"+"<<op[i].y<<endl;
h(a,4-i,op[i].x,op[i].y,op[i].x+op[i].y);
break;
case 2:cout<<op[i].x<<"-"<<op[i].y<<endl;
h(a,4-i,op[i].x,op[i].y,op[i].x-op[i].y);
break;
case 3:cout<<op[i].x<<"*"<<op[i].y<<endl;
h(a,4-i,op[i].x,op[i].y,op[i].x*op[i].y);
break;
case 4:cout<<op[i].x<<"/"<<op[i].y<<endl;
h(a,4-i,op[i].x,op[i].y,op[i].x/op[i].y);
break;
case 5:cout<<op[i].y<<"-"<<op[i].x<<endl;
h(a,4-i,op[i].x,op[i].y,op[i].y-op[i].x);
break;
case 6:cout<<op[i].y<<"/"<<op[i].x<<endl;
h(a,4-i,op[i].x,op[i].y,op[i].y/op[i].x);
break;
}
}
cout<<"24"<<endl;
}
else cout<<"不能算出24"<<endl;
}
❸ 计算24点 要求:用C语言编写,输入4个数,通过加减乘除计算出24点,显示计算过程,并提示成功信息.
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"
#include "string.h"
#include "math.h"
typedef float dd[5];
dd a; //输入的4个数
dd b; //4个数计算后剩余的3个数
dd c; //3个数计算后剩余的2个数
int num=0;
char temp1[200]; //用于存储4个数中任意2个数参与运算的表达式
char temp2[200]; //用于存储3个数中任意2个数参与运算的表达式
void js4(); //4个数参与运算
void js3(); //3个数参与运算
void js2(); //2个数参与运算
void main()
{
int i;
printf("输入4个小于10的正整数:");
for(i=1;i<=4;i++)
{
scanf("%f",&a[i]);
if(a[i]<1 || a[i]>10)
{
printf("输入数字有误!");
return;
}
}
js4();
if(num==0)
{
printf("\n对不起,没有可行的算法!");
}
}
void js4()
{
int i,j,k,m;
for(i=1;i<=4;i++) //取遍4个数a[1],a[2],a[3],a[4]
{
for(j=i+1;j<=4;j++) //与其后每个数进行组合
{
m=2; //找到没参与运算的数
for(k=1;k<=4;k++)
{
if(k!=i && k!=j)
{
b[m]=a[k];
m=m+1;
}
}
//进行四则运算,并记录表达式(备用)
//加
b[1]=a[i]+a[j];
sprintf(temp1,"%0.2f+%0.2f=%0.2f",a[i],a[j],b[1]);
js3();
//减
if(a[i]>a[j])
{
b[1]=a[i]-a[j];
sprintf(temp1,"%0.2f-%0.2f=%0.2f",a[i],a[j],b[1]);
}
else
{
b[1]=a[j]-a[i];
sprintf(temp1,"%0.2f-%0.2f=%0.2f",a[j],a[i],b[1]);
}
js3();
//乘
b[1]=a[i]*a[j];
sprintf(temp1,"%0.2f*%0.2f=%0.2f",a[i],a[j],b[1]);
js3();
//除
if(a[i]>a[j] && a[j]!=0)
{
b[1]=a[i]/a[j];
sprintf(temp1,"%0.2f/%0.2f=%0.2f",a[i],a[j],b[1]);
}
else if(a[i]!=0 && a[j]!=0)
{
b[1]=a[j]/a[i];
sprintf(temp1,"%0.2f/%0.2f=%0.2f",a[j],a[i],b[1]);
}
js3();
}
}
}
void js3()
{
int i,j,k,m;
for(i=1;i<=3;i++) //取遍3个数a[1],a[2],a[3],a[4]
{
for(j=i+1;j<=3;j++) //与其后每个数进行组合
{
m=2; //找到没参与运算的数
for(k=1;k<=3;k++)
{
if(k!=i && k!=j)
{
c[m]=b[k];
m=m+1;
}
}
//进行四则运算,并记录表达式(备用)
//加
c[1]=b[i]+b[j];
sprintf(temp2,"%0.2f+%0.2f=%0.2f",b[i],b[j],c[1]);
js2();
//减
if(b[i]>b[j])
{
c[1]=b[i]-b[j];
sprintf(temp2," %0.2f-%0.2f=%0.2f",b[i],b[j],c[1]);
}
else
{
c[1]=b[j]-b[i];
sprintf(temp2," %0.2f-%0.2f=%0.2f",b[j],b[i],c[1]);
}
js2();
//乘
c[1]=b[i]*b[j];
sprintf(temp2," %0.2f*%0.2f=%0.2f",b[i],b[j],c[1]);
js2();
//除
if(b[i]>b[j] && b[j]!=0)
{
c[1]=b[i]/b[j];
sprintf(temp2," %0.2f/%0.2f=%0.2f",b[i],b[j],c[1]);
}
else if(b[i]!=0 && b[j]!=0)
{
c[1]=b[j]/b[i];
sprintf(temp2," %0.2f/%0.2f=%0.2f",b[j],b[i],c[1]);
}
js2();
}
}
}
void js2()
{
//对最后2个数的四则运算最终结果进行判断,将满足条件的情况输出
//加
if(c[1]+c[2]==24)
{
printf("%s\t%s\t%f+%0.2f=24\n",temp1,temp2,c[1],c[2]);
num=num+1;
}
//减
if(c[1]-c[2]==24)
{
printf("%s\t%s\t%f-%0.2f=24\n",temp1,temp2,c[1],c[2]);
num=num+1;
}
else if(c[2]-c[1]==24)
{
printf("%s\t%s\t%f-%0.2f=24\n",temp1,temp2,c[2],c[1]);
num=num+1;
}
//乘
if(c[1]*c[2]==24)
{
printf("%s\t%s\t%f*%0.2f=24\n",temp1,temp2,c[1],c[2]);
num=num+1;
}
//除
if(c[1]>c[2] && c[2]!=0)
{
if(c[1]/c[2]==24)
{
printf("%s\t%s\t%f/%0.2f=24\n",temp1,temp2,c[1],c[2]);
num=num+1;
}
}
else if(c[2]>c[1] && c[1]!=0)
{
if(c[2]/c[1]==24)
{
printf("%s\t%s\t%f/%0.2f=24\n",temp1,temp2,c[2],c[1]);
num=num+1;
}
}
}
❹ 如何用C语言实现24点运算
我有c++的
#include<iostream>
#include<string>
using namespace std;
const double Threshold=1E-6;
const int CardsNumber=4;
const int ResultValue=24;
double number[CardsNumber];
string result[CardsNumber];
bool PointsGame(int n)
{
if(n==1)
{
if(fabs(number[0]-ResultValue)<Threshold)
{
cout<<result[0]<<endl;
return true;
}
else
{
return false;
}
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
double a,b;
string expa,expb;
a=number[i];
b=number[j];
number[j]=number[n-1];
expa=result[i];
expb=result[j];
result[j]=result[n-1];
result[i]='('+expa+'+'+expb+')';
number[i]=a+b;
if(PointsGame(n-1))
return true;
result[i]='('+expa+'-'+expb+')';
number[i]=a-b;
if(PointsGame(n-1))
return true;
result[i]='('+expb+'-'+expa+')';
number[i]=b-a;
if(PointsGame(n-1))
return true;
result[i]='('+expa+'*'+expb+')';
number[i]=a*b;
if(PointsGame(n-1))
return true;
if(b!=0)
{
result[i]='('+expa+'/'+expb+')';
number[i]=a/b;
if(PointsGame(n-1))
return true;
}
if(a!=0)
{
result[i]='('+expb+'/'+expa+')';
number[i]=b/a;
if(PointsGame(n-1))
return true;
}
number[i]=a;
number[j]=b;
result[i]=expa;
result[j]=expb;
}
}
return false;
}
int main()
{
int x;
for(int i=0;i<CardsNumber;i++)
{
char buffer[20];
cout<<"the "<<i<<"th number:";
cin>>x;
number[i]=x;
itoa(x,buffer,10);
result[i]=buffer;
}
if(PointsGame(CardsNumber))
{
cout<<"Success."<<endl;
}
else
{
cout<<"Fail."<<endl;
}
system("pause");
return 0;
}
❺ 用c语言编写24点代码分析
#include<stdio.h>
double fun(double a1,double a2,int b) //用于尝试着计算的函数,b为运算控制
{
switch(b)
{
case 0:return (a1+a2);
case 1:return (a1-a2);
case 2:return (a1*a2);
case 3:return (a1/a2);
}
}
void main()
{
int i,j,k,l,n,m,r,save[4];
double num[4]={1,1,1,1},tem1,tem2,tem3,abc=1111;
char sign[5]="+-*/"; //打印时候用的符号,需要和fun函数里的顺序保持一致
printf("input 4 numbers:");
for(i=0;i<4;i++)
{
scanf("%lf",num+i); //输入数据
save[i]=num[i]; //保存原始数据
}
//下面程序的思想,就是利用穷举(其实就是使用的排列组合方法)来计算可能的组合。
//先把输入的4个数进行排列(前4个for语句就这个用途)
//再依次插入三个运算符(后3个for语句就这个用途)
//事实上,从这里看,这个程序是不怎样的。七层循环嵌套,这是编程的大忌。一般循环嵌套最好不要超过两层。
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(j!=i)
{
for(k=0;k<4;k++)
if(k!=i&&k!=j)
{
for(l=0;l<4;l++)
if(l!=i&&l!=j&&l!=k)
{
for(n=0;n<4;n++)
for(m=0;m<4;m++)
for(r=0;r<4;r++)
{
tem1=fun(num[i],num[j],n);
tem2=fun(tem1,num[k],m);
tem3=fun(tem2,num[l],r);
//以下五种处理方法,涵盖了有可能的全部运算顺序
//这也是本程序最精妙的地方。
if(tem3==24.0)//如果直接算得了24,说明次序不变,直接输出就是
printf("{(%d%c%d)%c%d}%c%d=24\n",save[i],sign[n],save[j],sign[m],save[k],sign[r],save[l]);
else if(tem3==-24.0)//如果算得的是负的,说明需要颠倒第二次运算(第三次运算不可能是加减)
printf("{%d%c(%d%c%d)}%c%d=24\n",save[k],sign[m],save[i],sign[n],save[j],sign[r],save[l]);
else if(tem3==1.0/24.0)//如果是倒数,说明需要颠倒最后一次运算(第三次运算同样不可能是加减)
printf("%d%c{(%d%c%d)%c%d}=24\n",save[l],sign[r],save[i],sign[n],save[j],sign[m],save[k]);
else if(tem3==-1.0/24.0)//如果是负倒数,则说明第二次和第三次运算都要颠倒(第三次运算同样不可能是加或减)
printf("%d%c{%d%c(%d%c%d)}=24\n",save[l],sign[r],save[k],sign[n],save[i],sign[m],save[j]);
else
{ //处理()*/+/-()的情况
tem1=fun(num[i],num[j],n);
tem2=fun(num[k],num[l],r);
tem3=fun(tem1,tem2,m);
if(tem3==24.0)
printf("(%d%c%d)%c(%d%c%d)=24\n",save[i],sign[n],save[j],sign[m],save[k],sign[r],save[l]);
}
}
}
}
}
}
//后面我再研究了下,发现"第三次不可能是加减法"这种思想是错误的,而程序作者在设计的时候,确实是这么认为的,所以,这个程序是有问题的.
//但程序里的主体思想没有问题,如果需要修改这个错误,程序需要在运算顺序判断上下功夫.结果只能取==24的情况.
❻ 24点 C语言程序
在网上找了个代码,我改了下,符合你的三个要求了。
#include<stdio.h>
double
fun(double
a1,double
a2,int
b)
{switch(b)
{case
0:return
(a1+a2);
case
1:return
(a1-a2);
case
2:return
(a1*a2);
case
3:return
(a1/a2);
}
}
void
main()
{int
i,j,k,l,n,m,r,save[4],flg=1;
double
num[4]={1,1,1,1},tem1,tem2,tem3,abc=1111;
char
sign[5]="+-*/";
printf("输入四个数:");
for(i=0;i<4;i++)
{scanf("%lf",num+i);
save[i]=num[i];if(save[i]>13)flg=0;}
if(flg)
{
flg=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(j!=i)
{for(k=0;k<4;k++)
if(k!=i&&k!=j)
{for(l=0;l<4;l++)
if(l!=i&&l!=j&&l!=k)
{for(n=0;n<4;n++)
for(m=0;m<4;m++)
for(r=0;r<4;r++)
{tem1=fun(num[i],num[j],n);
tem2=fun(tem1,num[k],m);
tem3=fun(tem2,num[l],r);
if(tem3==24.0)
{printf("{(%d%c%d)%c%d}%c%d=24\n",save[i],sign[n],save[j],sign[m],save[k],sign[r],save[l]);return;}
else
if(tem3==-24.0)
{printf("{%d%c(%d%c%d)}%c%d=24\n",save[k],sign[m],save[i],sign[n],save[j],sign[r],save[l]);return;}
else
if(tem3==1.0/24.0)
{printf("%d%c{(%d%c%d)%c%d}=24\n",save[l],sign[r],save[i],sign[n],save[j],sign[m],save[k]);return;}
else
if(tem3==-1.0/24.0)
{printf("%d%c{%d%c(%d%c%d)}=24\n",save[l],sign[r],save[k],sign[n],save[i],sign[m],save[j]);return;}
else
{tem1=fun(num[i],num[j],n);
tem2=fun(num[k],num[l],r);
tem3=fun(tem1,tem2,m);
if(tem3==24.0)
{printf("(%d%c%d)%c(%d%c%d)=24\n",save[i],sign[n],save[j],sign[m],save[k],sign[r],save[l]);return;}
}
}
}
}
}
}
if(!flg)
printf("NO
ANSWER\n");
}
❼ C语言算24点
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char op[3], o[5]="+-*/";
float n[4], on[10];
int used[4] = {0}, top=0, tp=0, x;
void chk(float k);
void search24(int d);
float calc(float n1, float n2, char o);
void make(int i, float p, float q, char o, int d);
int main( void )
{
printf("please input 4 card number: ");
scanf("%f%f%f%f", &n[0], &n[1], &n[2], &n[3]);
search24(0);
printf("No answer. ");
return 0;
}
void chk(float k)
{
if( (tp != 3) || ( fabs(k-24.0) > 0.000001 )) //没有用完3个运算符或者结果不为24就退出.
return;
for(x=0; x<5; x+=2) //这样设计是为了使3个选中的符号都可以得到输出.
printf("%g%c%g=%g ", on[x], op[x/2], on[x+1], //分析得到的.
calc(on[x], on[x+1], op[x/2]));
system("pause");
exit(0);
}
float calc(float n1, float n2, char o)
{
switch(o){
case '+': return (n1+n2);
case '-': return (n1-n2);
case '*': return (n1*n2);
case '/': return (n1/n2);
default: exit(0);
}
}
void make(int i, float p, float q, char o, int d)
{
if(fabs(q)>0.000001 || o!='/') //除数不为0,或者为0的时候不能为除数.
n[i] = calc(p, q, o);
op[tp++] = o;
chk(n[i]);
search24(d+1);
tp--; //因为是全是全局变量,所以在做试验性的循环递归问题时,如果失败,要在递归函数后面重新恢复回原来的值
}
void search24(int d)
{
int i, j, k;
float p, q;
if(d>=3) //控制递归深度,就是运算符的输出个数.
return;
for(i=0; i<4; i++)
for(j=0; j<4; j++)
if( (i!=j)&& (used[i]+used[j] == 0) ) //i!=j是防止重复,(used[i]+used[j] == 0)是防止又再匹配已经用过的j,
//但是i可以新来.
{
used[j] = 1; //j得到匹配之后,赋值为1,表示已经使用
p=n[i];
q=n[j];
on[top++] = p;
on[top++] = q;
for(k=0; k<4; k++) //运算符的循环试用.
make(i, p, q, o[k], d);
n[i] = p; //因为是全是全局变量,所以在做试验性的循环递归问题时,
used[j] = 0; //如果失败,要在递归函数后面重新恢复回原来的值
top -= 2; //
}
}
出处:http://blog.sina.com.cn/s/blog_491de9d60100d5er.html
❽ 编程C语言 24点游戏
{
printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email);
if(i>1&&i%10==0)
{
printf("\t-----------------------------------\n");
printf("\t");
system("pause");
printf("\t-----------------------------------\n");
}
}
❾ C语言24点的算法
下面是我自己写的一个程序:
我的解法是把这个问题分解成了两个子问题,首先求出4个数字的无重复全排列,放到一个数组里面,再对没一个排列情况,从头到尾穷举所有的四则运算情况。注意到除法是特殊的,我用x/y表示x除以y,用x|y表示x分之y。注意到,如果穷举的解得到-24的话,只需要把有减法的地方调换一下顺序就可以了,代码如下
/***********************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int index[4]={0,1,2,3};//used to generate subscription collection
int sub[4]; //used in p() only
float f[4]={8.0f,3.0f,3.0f,8.0f};//the 24 point numbers
float fs[24][4];//all possible permutaions of f
float tmp[4]; //used for buf
int g_number=0; //number of permutations
float RES[4];
char op[3];
void p(int idx){//求全排列的函数
if(idx==4){
for(int i=0;i<4;++i){tmp[i]=f[sub[i]];}
for(int g=0;g<g_number;++g){if(memcmp(fs[g],tmp,sizeof(float)*4)==0)return;}
for(int i=0;i<4;++i){fs[g_number][i]=f[sub[i]];}
g_number++;
return;
}
for(int i=0;i<4;++i){//make subscription collections
bool pflag=false;
for(int j=0;j<idx;++j){if(sub[j]==i)pflag=true;}
if(pflag==true)continue;
sub[idx]=index[i];
p(idx+1);
}
}
void solve(int L){//对某个排列,递归求所有四则运算的结果,找到就退出
if(L==3){
if(fabs(fabs(RES[L])-24.0f)<0.01f){
printf("Found solution,RES=%f,((%d%c%d)%c%d)%c%d\n",RES[L],
(int)f[0],op[0],
(int)f[1],op[1],
(int)f[2],op[2],
(int)f[3]);
exit(0);
}
return;
}
for(int j=0;j<5;++j){//j judges for operators
if(j==0){RES[L+1]=RES[L]+tmp[L+1];op[L]='+';solve(L+1);}
if(j==1){RES[L+1]=RES[L]-tmp[L+1];op[L]='-';solve(L+1);}
if(j==2){RES[L+1]=RES[L]*tmp[L+1];op[L]='*';solve(L+1);}
if(j==3&&tmp[L+1]!=0)
{RES[L+1]=RES[L]/tmp[L+1];op[L]='/';solve(L+1);}
if(j==4&&RES[L+1]!=0)
{RES[L+1]=tmp[L+1]/RES[L];op[L]='|';solve(L+1);}
}
}
int main(int argc,char* argv[]){//should avoid 0
f[0]=atoi(argv[1]);
f[1]=atoi(argv[2]);
f[2]=atoi(argv[3]);
f[3]=atoi(argv[4]);
p(0);
for(int i=0;i<g_number;++i){
memcpy(tmp,fs[i],sizeof(float)*4);
RES[0]=tmp[0];
for(int t=0;t<4;++t){ printf("%d,",(int)tmp[t]); }
printf("\n");
solve(0);
}
printf("Found no solution :( \n");
return 0;
}
----------编译运行,运行时的参数就是4个数字
g++ p.cpp && ./a.out 1 5 5 5
1,5,5,5,
Found solution,RES=-24.000000,((1/5)-5)*5
g++ p.cpp && ./a.out 8 3 3 8
8,3,3,8,
Found solution,RES=-24.000006,((8/3)-3)|8
上面这个解写出来就是
8
--------- = 24
3-(8/3)
主程序为了简化,省去了对输入的检查,楼主可以自己添加。