private void button1_Click(object sender, EventArgs e)
{
Expression expression = new Expression();
Thinker thinker = new Thinker(expression);
List<int> card = new List<int>();
int target = 24;
if ((n1.Text== string.Empty)||( n2.Text== string.Empty )||( n3.Text== string.Empty) || (n4.Text==string.Empty)) {
MessageBox.Show("请输入完整的四个数字!");
return;
}
if ((int.Parse(n1.Text) < 0) ||( int.Parse(n1.Text) > 13)) {
MessageBox.Show("第一个数溢出,重新输入!");
n1.Focus();
return;
}
if ((int.Parse(n2.Text) < 0) ||( int.Parse(n2.Text) > 13))
{
MessageBox.Show("第二个数溢出,重新输入!");
n2.Focus();
return;
}
if ((int.Parse(n3.Text) < 0) ||( int.Parse(n3.Text) > 13))
{
MessageBox.Show("第三个数溢出,重新输入!");
n3.Focus();
return;
}
if ((int.Parse(n4.Text) < 0) || (int.Parse(n4.Text) > 13))
{
MessageBox.Show("第四个数溢出,重新输入!");
n4.Focus();
return;
}
card.Add(int.Parse(this.n1.Text));
card.Add(int.Parse(this.n2.Text));
card.Add(int.Parse(this.n3.Text));
card.Add(int.Parse(this.n4.Text));
listBox1.Items.Clear();
thinker.count(card, card.Count - 1, target, listBox1);
if (listBox1.Items.Count==0)
{
MessageBox.Show("无法组成24点!!");
}
}
{
Expression expression = new Expression();
Thinker thinker = new Thinker(expression);
List<int> card = new List<int>();
int target = 24;
if ((n1.Text== string.Empty)||( n2.Text== string.Empty )||( n3.Text== string.Empty) || (n4.Text==string.Empty)) {
MessageBox.Show("请输入完整的四个数字!");
return;
}
if ((int.Parse(n1.Text) < 0) ||( int.Parse(n1.Text) > 13)) {
MessageBox.Show("第一个数溢出,重新输入!");
n1.Focus();
return;
}
if ((int.Parse(n2.Text) < 0) ||( int.Parse(n2.Text) > 13))
{
MessageBox.Show("第二个数溢出,重新输入!");
n2.Focus();
return;
}
if ((int.Parse(n3.Text) < 0) ||( int.Parse(n3.Text) > 13))
{
MessageBox.Show("第三个数溢出,重新输入!");
n3.Focus();
return;
}
if ((int.Parse(n4.Text) < 0) || (int.Parse(n4.Text) > 13))
{
MessageBox.Show("第四个数溢出,重新输入!");
n4.Focus();
return;
}
card.Add(int.Parse(this.n1.Text));
card.Add(int.Parse(this.n2.Text));
card.Add(int.Parse(this.n3.Text));
card.Add(int.Parse(this.n4.Text));
listBox1.Items.Clear();
thinker.count(card, card.Count - 1, target, listBox1);
if (listBox1.Items.Count==0)
{
MessageBox.Show("无法组成24点!!");
}
}
第二个类为:Thinker
代码分别如下:
Expression.cs
using System;
using System.Collections.Generic;
using System.Text;namespace _24点
{
public class Expression
{
private List<int> _num = new List<int>();
private List<String> _sign = new List<String>();
public void add(int num)
{
_num.Add(num);
}
public void add(String sign)
{
_sign.Add(sign);
}
private int getPriority(String sign)
{
if (sign.Equals("+")) return 1;
if (sign.Equals("-")) return 1;
if (sign.Equals("*")) return 2;
if (sign.Equals("/")) return 2;
return -1;
}
private String toString(int layer)
{
if (layer == 0)
{
return _num[0] + _sign[0] + _num[1];
}
else
{
String result = this.toString(layer - 1);
if (getPriority(_sign[layer]) > getPriority(_sign[layer - 1]))
result = "(" + result + ")";
result += _sign[layer] + _num[layer + 1];
return result;
}
}
public String toString()
{
return toString(2);
}
public void clear()
{
_num.Clear();
_sign.Clear();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;//add
using System.Windows.Forms;
namespace _24点
{
public class Thinker
{
private Expression _expression;
public Thinker(Expression expression)
{
_expression = expression;
}
public bool count(List<int> array, int num, int target, ListBox box)
{
if (num == 1)
{
if ((array[0] + array[1]) == target)
{
_expression.add(array[0]);
_expression.add(array[1]);
_expression.add("+");
return true;
}
if ((array[0] - array[1]) == target)
{
_expression.add(array[0]);
_expression.add(array[1]);
_expression.add("-");
return true;
}
if ((array[1] - array[0]) == target)
{
_expression.add(array[1]);
_expression.add(array[0]);
_expression.add("-");
return true;
}
if ((array[0] * array[1]) == target)
{
_expression.add(array[0]);
_expression.add(array[1]);
_expression.add("*");
return true;
}
if ((array[0] * target == array[1]))
{
_expression.add(array[1]);
_expression.add(array[0]);
_expression.add("/");
return true;
}
if ((array[1] * target == array[0]))
{
_expression.add(array[0]);
_expression.add(array[1]);
_expression.add("/");
return true;
}
return false;
}
else
{
for (int current = 0; current < array.Count; current++)
{
List<int> array1 = new List<int>();
int currentNum = array[current];
for (int i = 0; i < array.Count; i++)
if (i != current) array1.Add(array[i]); //array
if (count(array1, num - 1, target - currentNum, box))
{
_expression.add("+");
_expression.add(currentNum);
if (num == 3)
{
box.Items.Add(_expression.toString());
//MessageBox.Show(_expression.toString());
_expression.clear();
}
if (num != 3) return true;
}
if (count(array1, num - 1, target + currentNum, box))
{
_expression.add("-");
_expression.add(currentNum);
if (num == 3)
{
box.Items.Add(_expression.toString());
_expression.clear();
}
if (num != 3) return true;
}
if (count(array1, num - 1, target * currentNum, box))
{
_expression.add("/");
_expression.add(currentNum);
if (num == 3)
{
box.Items.Add(_expression.toString());
_expression.clear();
}
if (num != 3) return true;
}
if (target % currentNum == 0)
{
if (count(array1, num - 1, (int)(target / currentNum), box))
{
_expression.add("*");
_expression.add(currentNum);
if (num == 3)
{
box.Items.Add(_expression.toString());
_expression.clear();
}
if (num != 3) return true;
}
}
}
return false;
}
}
}
}
Expression expression = new Expression();
Thinker thinker = new Thinker(expression);
把这些代码贴出来,看看
if (num != 3) return true;可否去掉?
我去掉就不对了?