实习期间伟大的项目经理让我写一个24点游戏。。。用C#。。。大家讨论一下算法 用多重循环嵌套做了一个,太傻了象小孩子写的谁有好点的算法我实在想不出来了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考代码private const double Precision = 1E-6; // 精度private bool fSearchExpression(double[] ANumbers, string[] AExpressions, int ALevel, int ADest, List<string> AResults){ bool Result = false; if ((ALevel <= 1) && (Math.Abs(ANumbers[0] - ADest) <= Precision)) { AResults.Add(AExpressions[0]); return true; } for (int i = 0; i < ALevel; i++) for (int j = i + 1; j < ALevel; j++) { double A = ANumbers[i]; double B = ANumbers[j]; ANumbers[j] = ANumbers[ALevel - 1]; string vExpA = AExpressions[i]; string vExpB = AExpressions[j]; AExpressions[j] = AExpressions[ALevel - 1]; AExpressions[i] = '(' + vExpA + '+' + vExpB + ')'; ANumbers[i] = A + B; if (fSearchExpression(ANumbers, AExpressions, ALevel - 1, ADest, AResults)) Result = true; AExpressions[i] = '(' + vExpA + '-' + vExpB + ')'; ANumbers[i] = A - B; if (fSearchExpression(ANumbers, AExpressions, ALevel - 1, ADest, AResults)) Result = true; AExpressions[i] = '(' + vExpB + '-' + vExpA + ')'; ANumbers[i] = B - A; if (fSearchExpression(ANumbers, AExpressions, ALevel - 1, ADest, AResults)) Result = true; AExpressions[i] = '(' + vExpA + '*' + vExpB + ')'; ANumbers[i] = A * B; if (fSearchExpression(ANumbers, AExpressions, ALevel - 1, ADest, AResults)) Result = true; if (B != 0) { AExpressions[i] = '(' + vExpA + '/' + vExpB + ')'; ANumbers[i] = A / B; if (fSearchExpression(ANumbers, AExpressions, ALevel - 1, ADest, AResults)) Result = true; } if (A != 0) { AExpressions[i] = '(' + vExpB + '/' + vExpA + ')'; ANumbers[i] = B / A; if (fSearchExpression(ANumbers, AExpressions, ALevel - 1, ADest, AResults)) Result = true; } ANumbers[i] = A; ANumbers[j] = B; AExpressions[i] = vExpA; AExpressions[j] = vExpB; } return Result;}private bool SearchExpression(List<string> AResults, int ADest, params int[] ANumbers){ double[] vNumbers = new double[ANumbers.Length]; string[] vExpressions = new string[ANumbers.Length]; for (int i = 0; i < ANumbers.Length; i++) { vNumbers[i] = ANumbers[i]; vExpressions[i] = ANumbers[i].ToString(); } return fSearchExpression(vNumbers, vExpressions, ANumbers.Length, ADest, AResults);}private void button1_Click(object sender, EventArgs e){ List<string> vExpressions = new List<string>(); SearchExpression(vExpressions, 24, 7, 7, 3, 3); foreach (string vExpression in vExpressions) Console.WriteLine(vExpression);}输出[code=BatchFile](((3/7)+3)*7)(((3/7)+3)*7)(7*((3/7)+3))(7*((3/7)+3))[/code] AExpressions[i] = '(' + vExpA + '+' + vExpB + ')';你确定CHAR型的和STRING型的可以相加么 char和string可不可以相加调试一下就知道的事情,这也要问?先动手调试再说 突然想到个问题,不准试,谁知道new 一个Form 出来,这个Form能不能和string相加.......为什么? 都可以,因为ToString()是object的方法,而所有的类都是继承至objectstring s = "123" + this + type;string s = "123" + typeof(Button); WPF:textbox的keydown事件中ctrl键值显示为“system”的问题 如何动态修改数据库连接,配置app.config .NET如何将gridview中的数据导出到excel表格里面 AJAX combobox设置simple后回车自动清空 asp.net中javascript怎么应用在虚拟形象中呢!急哦。 400分求学习计划4 win7 64位ComputeSignature(signer)签名出错 在c#中咋调用API函数? 在C#中开发WEB,如何显示提示 C# 数字版权管理 求~~~~~~~~~~~~~~~~帮顶有分啊!!! 一个VB转C#的问题
private const double Precision = 1E-6; // 精度
private bool fSearchExpression(double[] ANumbers, string[] AExpressions,
int ALevel, int ADest, List<string> AResults)
{
bool Result = false;
if ((ALevel <= 1) && (Math.Abs(ANumbers[0] - ADest) <= Precision))
{
AResults.Add(AExpressions[0]);
return true;
}
for (int i = 0; i < ALevel; i++)
for (int j = i + 1; j < ALevel; j++)
{
double A = ANumbers[i];
double B = ANumbers[j];
ANumbers[j] = ANumbers[ALevel - 1];
string vExpA = AExpressions[i];
string vExpB = AExpressions[j];
AExpressions[j] = AExpressions[ALevel - 1];
AExpressions[i] = '(' + vExpA + '+' + vExpB + ')';
ANumbers[i] = A + B;
if (fSearchExpression(ANumbers, AExpressions,
ALevel - 1, ADest, AResults)) Result = true;
AExpressions[i] = '(' + vExpA + '-' + vExpB + ')';
ANumbers[i] = A - B;
if (fSearchExpression(ANumbers, AExpressions,
ALevel - 1, ADest, AResults)) Result = true;
AExpressions[i] = '(' + vExpB + '-' + vExpA + ')';
ANumbers[i] = B - A;
if (fSearchExpression(ANumbers, AExpressions,
ALevel - 1, ADest, AResults)) Result = true;
AExpressions[i] = '(' + vExpA + '*' + vExpB + ')';
ANumbers[i] = A * B;
if (fSearchExpression(ANumbers, AExpressions,
ALevel - 1, ADest, AResults)) Result = true;
if (B != 0)
{
AExpressions[i] = '(' + vExpA + '/' + vExpB + ')';
ANumbers[i] = A / B;
if (fSearchExpression(ANumbers, AExpressions,
ALevel - 1, ADest, AResults)) Result = true;
}
if (A != 0)
{
AExpressions[i] = '(' + vExpB + '/' + vExpA + ')';
ANumbers[i] = B / A;
if (fSearchExpression(ANumbers, AExpressions,
ALevel - 1, ADest, AResults)) Result = true;
}
ANumbers[i] = A;
ANumbers[j] = B;
AExpressions[i] = vExpA;
AExpressions[j] = vExpB;
}
return Result;
}private bool SearchExpression(List<string> AResults, int ADest,
params int[] ANumbers)
{
double[] vNumbers = new double[ANumbers.Length];
string[] vExpressions = new string[ANumbers.Length];
for (int i = 0; i < ANumbers.Length; i++)
{
vNumbers[i] = ANumbers[i];
vExpressions[i] = ANumbers[i].ToString();
}
return fSearchExpression(vNumbers, vExpressions,
ANumbers.Length, ADest, AResults);
}private void button1_Click(object sender, EventArgs e)
{
List<string> vExpressions = new List<string>();
SearchExpression(vExpressions, 24, 7, 7, 3, 3);
foreach (string vExpression in vExpressions)
Console.WriteLine(vExpression);
}
输出
[code=BatchFile]
(((3/7)+3)*7)
(((3/7)+3)*7)
(7*((3/7)+3))
(7*((3/7)+3))[/code]
string s = "123" + typeof(Button);