谁知道算24点游戏的算法? 我想写一个程序,输入1到10的任意四个数,要求列出经过加、减、乘、除及括号运算后,结果为24的所有解。如: 输入:1、2、3、4 输出:1*2*3*4=24 不知道这个算法这么写? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这种问题,到数据算法版或C/C++版比较容易找到答案,如果你懂C++的话,自己试着改改吧。http://www.csdn.net/expert/topic/677/677058.xml?temp=.7747309 正在编写中。。我的算法应该说是很差的。for a := 1 to 3 // 第一个符号 for b := 1 to 3 //第二个符号 for c := 1 to 3 //第三个符号至于括号的太麻烦了。我正在考虑中。。MYEmail : [email protected]欢迎来信讨论。 把for := 1 to 3 do改为for := 1 to 4 do 每一个有4种可能。 c++源码:------------------------------------------#include <iostream > #include <string > #include <cmath > using namespace std; const double PRECISION = 1E-6; const int COUNT_OF_NUMBER = 4; const int NUMBER_TO_BE_CAL = 24; double number[COUNT_OF_NUMBER]; string expression[COUNT_OF_NUMBER]; bool Search(int n) { if (n == 1) { if ( fabs(number[0] - NUMBER_TO_BE_CAL) < PRECISION ) { cout < < expression[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 = expression[i]; expb = expression[j]; expression[j] = expression[n - 1]; expression[i] = '(' + expa + '+' + expb + ')'; number[i] = a + b; if ( Search(n - 1) ) return true; expression[i] = '(' + expa + '-' + expb + ')'; number[i] = a - b; if ( Search(n - 1) ) return true; expression[i] = '(' + expb + '-' + expa + ')'; number[i] = b - a; if ( Search(n - 1) ) return true; expression[i] = '(' + expa + '*' + expb + ')'; number[i] = a * b; if ( Search(n - 1) ) return true; if (b != 0) { expression[i] = '(' + expa + '/' + expb + ')'; number[i] = a / b; if ( Search(n - 1) ) return true; } if (a != 0) { expression[i] = '(' + expb + '/' + expa + ')'; number[i] = b / a; if ( Search(n - 1) ) return true; } number[i] = a; number[j] = b; expression[i] = expa; expression[j] = expb; } } return false; } void main() { for (int i = 0; i < COUNT_OF_NUMBER; i++) { char buffer[20]; int x; cin > > x; number[i] = x; itoa(x, buffer, 10); expression[i] = buffer; } if ( Search(COUNT_OF_NUMBER) ) { cout < < "Success. " < < endl; } else { cout < < "Fail. " < < endl; } } ------------------------------------我试了,连3 3 8 8 和5 5 5 1都能算。 http://expert.csdn.net/Expert/topic/1091/1091275.xml?temp=.6776544 求一份SSE指令的说明文档. 请问如何让自己做的程序能够自动适应不同分辨率的屏幕呢? 请帮忙看看,在此谢谢了 如何取最后一个字 各位高手,帮忙看看! 谢了 星期六都得上班!发劳骚啊......请问各位大虾: 哪有 Delphi 7 For .NET 的资料???? SOS 问一个很弱的问题。在线急等。 关于Delphi下嵌汇编的问题 各位,麻烦进来看看这个语句是什么意识???????????????????? 烦请各位编程高手推荐一本Delphi好书 odbc 問題 2个月来全国各地招聘各种程序员数量统计.
http://www.csdn.net/expert/topic/677/677058.xml?temp=.7747309
for a := 1 to 3 // 第一个符号
for b := 1 to 3 //第二个符号
for c := 1 to 3 //第三个符号至于括号的太麻烦了。
我正在考虑中。。
MYEmail : [email protected]欢迎来信讨论。
改为for := 1 to 4 do 每一个有4种可能。
------------------------------------------
#include <iostream >
#include <string >
#include <cmath >
using namespace std;
const double PRECISION = 1E-6;
const int COUNT_OF_NUMBER = 4;
const int NUMBER_TO_BE_CAL = 24;
double number[COUNT_OF_NUMBER];
string expression[COUNT_OF_NUMBER];
bool Search(int n)
{
if (n == 1) {
if ( fabs(number[0] - NUMBER_TO_BE_CAL) < PRECISION ) {
cout < < expression[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 = expression[i];
expb = expression[j];
expression[j] = expression[n - 1];
expression[i] = '(' + expa + '+' + expb + ')';
number[i] = a + b;
if ( Search(n - 1) ) return true;
expression[i] = '(' + expa + '-' + expb + ')';
number[i] = a - b;
if ( Search(n - 1) ) return true;
expression[i] = '(' + expb + '-' + expa + ')';
number[i] = b - a;
if ( Search(n - 1) ) return true;
expression[i] = '(' + expa + '*' + expb + ')';
number[i] = a * b;
if ( Search(n - 1) ) return true;
if (b != 0) {
expression[i] = '(' + expa + '/' + expb + ')';
number[i] = a / b;
if ( Search(n - 1) ) return true;
}
if (a != 0) {
expression[i] = '(' + expb + '/' + expa + ')';
number[i] = b / a;
if ( Search(n - 1) ) return true;
}
number[i] = a;
number[j] = b;
expression[i] = expa;
expression[j] = expb;
}
}
return false;
}
void main()
{
for (int i = 0; i < COUNT_OF_NUMBER; i++) {
char buffer[20];
int x;
cin > > x;
number[i] = x;
itoa(x, buffer, 10);
expression[i] = buffer;
}
if ( Search(COUNT_OF_NUMBER) ) {
cout < < "Success. " < < endl;
} else {
cout < < "Fail. " < < endl;
}
}
------------------------------------
我试了,连3 3 8 8 和5 5 5 1都能算。