您的位置:首页 > 其它

24 点游戏的初步算法

2012-05-01 11:22 253 查看
#include <cstdlib>
#include <iostream>

using namespace std;

double a0,a1,a2,a3,a4;
int b1,b2,b3;
int i;
int k=0;
int a[13];
const double TARGET = 25;

double operate( double a, double b, int c)
{
switch(c)
{
case 1: return (a+b);
case 2: return (a-b);
case 3: return (a*b);
case 4: return (a/b);
}
return 0;
}

char disp(int a)
{
switch(a)
{
case 1:
return '+';
case 2:
return '-';
case 3:
return '*';
case 4:
return '//';
}
return '?';
}

bool sort(int a)
{
double result;
switch(a)
{
case 1:
result = operate(operate(operate(a1,a2,b1),a3,b2),a4,b3);
break;
case 2:
result = operate(operate(a1,operate(a2,a3,b2),b1),a4,b3);
break;
case 3:
result = operate(operate(a1,a2,b1),operate(a3,a4,b3),b2);
break;
case 4:
result = operate(a1,operate(operate(a2,a3,b2),a4,b3),b1);
break;
case 5:
result = operate(a1,operate(a2,operate(a3,a4,b3),b2),b1);
break;
case 6:
result = operate(operate(a1,operate(a2,a3,b2),b1),a4,b3);
break;
}
if( (TARGET-0.0001)<result && result<(TARGET+0.0001) )
return 1;
else
return 0;
}

int geta()
{
switch(i)
{
case 1: break;
case 2: a0=a3;a3=a4;a4=a0; break;
case 3: a0=a2;a2=a4;a4=a0; break;
case 4: a0=a3;a3=a4;a4=a0; break;
case 5: a0=a2;a2=a4;a4=a0; break;
case 6: a0=a3;a3=a4;a4=a0; break;
case 7: a0=a3;a3=a4;a4=a0;    a0=a3;a3=a1;a1=a0;   a0=a2;a2=a4;a4=a0; break;
case 8: a0=a3;a3=a2;a2=a0; break;
case 9: a0=a3;a3=a4;a4=a0; break;
case 10: a0=a3;a3=a2;a2=a0; break;
case 11: a0=a2;a2=a4;a4=a0;   a0=a1;a1=a2;a2=a0;   break;
case 12: a0=a3;a3=a2;a2=a0; break;
case 13: return 0;
}
a0 = a1*100008 + a2*1005 + a3*12 + a4;

int j=0;
for(j=1; j<=k; j++)
{
if(a[j]==a0)
{
j=155;
break;
}
}

if(j==155)
{
i++;
geta();
}
else
{
k++;
a[k]=(int)a0;
}
return 0;
}

int main(int argc, char *argv[])
{
cout << "请输入四个数字,用空格间隔开:";
while(cin >> a1 >> a2 >> a3 >> a4)
{

int outcome=0;
int way;
int num=0;

for( i=1; i<=12; i++)
{
geta();
if(i>12) break;
for( way=1; way<=5; way++)
{
for( b1=1; b1<=4; b1++)
{
for( b2=1; b2<=4; b2++)
{
for( b3=1; b3<=4; b3++)
{
if( sort(way) == true )
{
switch(way)
{
case 1:
num++;
cout << "case " << num << ": " << '(' << '(' << a1 << disp(b1) << a2 << ')' << disp(b2) << a3 << ')' << disp(b3) << a4 << endl;
break;
case 2:
num++;
cout << "case " << num << ": " << '(' << a1 << disp(b1) << '(' << a2 << disp(b2) << a3 << ')' << ')' << disp(b3) << a4 << endl;
break;
case 3:
num++;
cout << "case " << num << ": " << '(' << a1 << disp(b1) << a2 << ')' << disp(b2) << '(' << a3 << disp(b3) << a4 << ')' << endl;
break;
case 4:
num++;
cout << "case " << num << ": " << a1 << disp(b1) << '(' << '(' << a2 << disp(b2) << a3 << ')' << disp(b3) << a4 << ')' << endl;
break;
case 5:
num++;
cout << "case " << num << ": " << a1 << disp(b1) << '(' << a2 << disp(b2) << '(' << a3 << disp(b3) << a4 << ')' << ')' << endl;
break;
}
}
}
}
}
}
}
if(num==0)
cout << "无解" << endl;
cout << "====请继续输入====" << endl;
}
//system("PAUSE");
return EXIT_SUCCESS;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  游戏 include 算法 c