24点回溯法实现

来源:互联网 发布:网络英语课程哪个好 编辑:程序博客网 时间:2024/06/17 19:00

// test11.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "iostream"
using namespace std;
int i=0;
void back(float a,float b,float c,float d,int j);
void add(float a,float b,float c,float d,int j)   
{
if ((a*b!=0)&&(j<4)&&(i!=1))
{
back(a+b,c,d,0,j+1);
if (i==1)
cout<<(a+b)<<"="<<a<<"+"<<b<<endl;
}
}


void sub(float a,float b,float c,float d,int j)  
{
if ((a*b!=0)&&(j<4)&&(i!=1))
{
back(a-b,c,d,0,j+1);
back(b-a,c,d,0,j+1);
if (i==1)
cout<<(a-b)<<"="<<a<<"-"<<b<<endl;
}
}


void mul(float a,float b,float c,float d,int j)
{
if ((a*b!=0)&&(j<4)&&(i!=1))
{
back(a*b,c,d,0,j+1);
if (i==1)
cout<<(a*b)<<"="<<a<<"*"<<b<<endl;
}
}


void divi(float a,float b,float c,float d,int j)
{
if ((a*b!=0)&&(j<4)&&(i!=1))
{
back(a/b,c,d,0,j+1);
if (i==1)
cout<<(a/b)<<"="<<a<<"/"<<b<<endl;
}
}


void back(float a,float b,float c,float d,int j) 
{
add(a,b,c,d,j);
mul(a,b,c,d,j);
sub(a,d,b,c,j);
divi(a,d,b,c,j);
add(a,c,b,d,j);
mul(a,c,b,d,j);
add(a,d,c,b,j);
mul(a,d,c,b,j);
sub(a,b,c,d,j);
divi(a,b,c,d,j);
sub(b,a,c,d,j);
divi(b,a,c,d,j);
sub(d,a,b,c,j);
divi(d,a,b,c,j);
sub(a,c,b,d,j);
divi(a,c,b,d,j);
if ((j==3)&&(a+b+c+d==24))   
i=1;
}
void main()
{
float a,b,c,d;
printf("input 4 num\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
if (i==0) back(a,b,c,d,0);
//if (i==0) back(b,a,c,d,0);
//if (i==0) back(c,b,a,d,0);
//if (i==0) back(d,a,b,c,0);
}