24点回溯法实现

// 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);

}

    原文作者:回溯法
    原文地址: https://blog.csdn.net/linhai0819/article/details/6866355
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞