當前位置:首頁 » 編程語言 » c語言24點演算法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言24點演算法

發布時間: 2022-09-06 23:14:09

❶ 用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)
主程序為了簡化,省去了對輸入的檢查,樓主可以自己添加。