白开心
IT博客
::
首页
:: ::
联系
::
聚合
::
管理
::
9 随笔 :: 76 文章 :: 28 评论 :: 0 Trackbacks
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
公告
独坐在路边街角,冷风吹醒,默默地伴着我的孤影。
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(12)
给我留言
查看公开留言
查看私人留言
文章分类
.Net(学习ing...)(39)
(rss)
Asp+vbScript(14)
(rss)
JavaScript(14)
(rss)
T-SQL(8)
(rss)
经典收藏(8)
(rss)
设计模式
(rss)
文章档案
2013年4月 (1)
2013年3月 (1)
2012年7月 (1)
2012年4月 (1)
2011年10月 (1)
2011年8月 (1)
2011年3月 (1)
2011年2月 (1)
2011年1月 (1)
2010年9月 (1)
2010年6月 (1)
2010年4月 (2)
2010年1月 (1)
2009年11月 (1)
2009年10月 (6)
2009年9月 (3)
2009年8月 (2)
2009年5月 (1)
2008年10月 (2)
2008年9月 (2)
2008年7月 (2)
2008年6月 (1)
2008年3月 (1)
2008年2月 (1)
2008年1月 (1)
2007年12月 (5)
2007年11月 (4)
2007年10月 (2)
2007年9月 (2)
2007年7月 (1)
2007年6月 (2)
2007年4月 (2)
2007年1月 (1)
2006年12月 (1)
2006年11月 (2)
2006年8月 (1)
2006年7月 (1)
2006年5月 (2)
2006年4月 (1)
2006年2月 (1)
2006年1月 (1)
2005年12月 (10)
相册
PhotoShop Study For HuangHuaXiang
我的相册
收藏夹
.NET(1)
(rss)
其他类别
(rss)
搜索
最新评论
1. re: JQUERY的表单异步提交[未登录]
1111111
--111
2. re: JQUERY的表单异步提交
eqedqedasd
--123
3. re: 委托和匿名函数
评论内容较长,点击标题查看
--bracelet shopping
4. re: 递归查询
您好!你的在我这里怎么执行不了啊!
--小陈
5. re: JS操作Xml的相关方法[未登录]
不能保丰到服务器上?
--11
阅读排行榜
1. 窦房折返性心动过速(928)
2. ∷∷∷∷男人感悟一百条∷∷∷∷(710)
3. 人生致命的八个经典问题(657)
4. 秋天不回来(570)
5. 圣诞(467)
评论排行榜
1. 圣诞(0)
2. 人生致命的八个经典问题(0)
3. ∷∷∷∷男人感悟一百条∷∷∷∷(0)
4. 窦房折返性心动过速(0)
5. 秋天不回来(0)
C#计算24点
1
24点算法
#region
24点算法
2
/**/
/*
3
* Count24(3,3,7,7)
4
* 穷举法
5
*
6
*/
7
8
private
string
[] countMethod
=
new
string
[]
{
"
+
"
,
"
-
"
,
"
*
"
,
"
/
"
}
;
9
private
int
[] countNum;
10
private
int
[] countNumBak;
11
12
public
string
Count24(
int
a,
int
b,
int
c,
int
d)
13
{
14
countNumBak
=
new
int
[
4
]
{ a, b, c, d }
;
15
countNum
=
new
int
[
4
];
16
string
result
=
"
没有找到合适的方法
"
;
17
bool
isTrue;
18
19
//
把 abcd 四个数字随机付给数组 countNum
20
for
(
int
i
=
0
; i
<
4
; i
++
)
21
{
22
countNum[
0
]
=
countNumBak[i];
23
for
(
int
j
=
0
; j
<
4
; j
++
)
24
{
25
if
(j
==
i)
26
continue
;
27
countNum[
1
]
=
countNumBak[j];
28
for
(
int
k
=
0
; k
<
4
; k
++
)
29
{
30
if
(k
==
j
||
k
==
i)
31
continue
;
32
countNum[
2
]
=
countNumBak[k];
33
countNum[
3
]
=
countNumBak[
1
+
2
+
3
-
i
-
j
-
k];
34
35
result
=
countMain24(countNum,
out
isTrue);
36
if
(
!
isTrue)
37
{
38
result
=
countMain(countNum,
out
isTrue);
39
}
40
41
if
(isTrue)
42
return
result;
43
else
44
result
=
"
没有找到合适的方法
"
;
45
}
46
}
47
}
48
49
return
result;
50
}
51
52
/**/
///
<summary>
53
///
组合计算,(第一个数字(方法)第二个数字) (方法) (第三个数字)(方法)(第四个数字)
54
///
</summary>
55
///
<param name="countNum"></param>
56
///
<param name="isTrue"></param>
57
///
<returns></returns>
58
private
string
countMain(
int
[] countNum,
out
bool
isTrue)
59
{
60
float
a, b, c;
61
string
result
=
string
.Empty;
62
isTrue
=
false
;
63
64
foreach
(
string
method
in
countMethod)
65
{
66
a
=
eval(method, (
float
)countNum[
0
], (
float
)countNum[
1
]);
67
foreach
(
string
m
in
countMethod)
68
{
69
b
=
eval(method, (
float
)countNum[
2
], (
float
)countNum[
3
]);
70
71
foreach
(
string
n
in
countMethod)
72
{
73
c
=
eval(n, a, b);
74
75
if
(Math.Round(c,
4
)
==
24
)
76
{
77
result
=
"
(
"
+
countNum[
0
].ToString()
+
method
+
countNum[
1
].ToString()
+
"
)
"
;
78
result
+=
n
+
"
(
"
+
countNum[
2
].ToString()
+
m
+
countNum[
3
].ToString()
+
"
)
"
;
79
isTrue
=
true
;
80
goto
TODO;
81
}
82
}
83
84
}
85
}
86
TODO:
87
return
result;
88
}
89
90
/**/
///
<summary>
91
///
顺序计算,第一个数字(方法)第二个数字(方法)第三个数字(方法)第四个数字
92
///
</summary>
93
///
<param name="countNum"></param>
94
///
<param name="isTrue"></param>
95
///
<returns></returns>
96
private
string
countMain24(
int
[] countNum,
out
bool
isTrue)
97
{
98
string
result
=
""
;
99
float
countValue
=
0
;
100
float
countValueBak
=
0
;
101
isTrue
=
false
;
102
float
upValueA, upValueBakA;
103
float
upValueB, upValueBakB;
104
105
//
a (方法) b (方法) c (方法) d
106
for
(
int
i
=
0
; i
<
4
; i
++
)
107
{
//
不必计算 b/a 的情况,数组重排列中会计算到此种情况
108
if
(countMethod[i]
==
"
/
"
&&
countNum[
1
]
==
0
)
109
countValue
=
(
float
)countNum[
0
];
110
else
111
countValue
=
eval(countMethod[i], (
float
)countNum[
0
], (
float
)countNum[
1
]);
112
113
upValueA
=
countValue;
114
upValueBakA
=
countValue;
115
116
for
(
int
j
=
0
; j
<
4
; j
++
)
117
{
118
//
第一种情况 (a和b的结果) (方法) c
119
if
(countMethod[j]
==
"
/
"
&&
countNum[
2
]
==
0
)
120
{ }
121
else
122
{
123
countValue
=
eval(countMethod[j], upValueA, (
float
)countNum[
2
]);
124
}
125
126
//
第二种情况 c (方法) (a和b的结果)
127
if
(countMethod[j]
==
"
/
"
&&
upValueBakA
==
0
)
128
{
129
countValueBak
=
upValueBakA;
130
}
131
else
132
{
133
countValueBak
=
eval(countMethod[j], (
float
)countNum[
2
], upValueBakA);
134
}
135
136
upValueB
=
countValue;
137
upValueBakB
=
countValueBak;
138
139
for
(
int
k
=
0
; k
<
4
; k
++
)
140
{
141
//
第一种情况 d (方法) (a,b,c的结果1)
142
if
(countMethod[k]
==
"
/
"
&&
upValueB
==
0
)
143
{ }
144
else
145
{
146
countValue
=
eval(countMethod[k], (
float
)countNum[
3
], upValueB);
147
if
(Math.Round(countValue,
4
)
==
24
)
148
{
//
如果已经得到24点,则结束本程序
149
result
=
countNum[
3
].ToString()
+
countMethod[k]
+
"
((
"
+
countNum[
0
].ToString()
+
countMethod[i]
+
countNum[
1
].ToString()
+
"
)
"
;
150
result
+=
countMethod[j]
+
countNum[
2
].ToString()
+
"
)
"
;
151
result
+=
"
= 24
"
;
152
isTrue
=
true
;
153
return
result;
154
}
155
}
156
157
//
第二种情况 (a,b,c的结果1) (方法) d
158
if
(countMethod[k]
==
"
/
"
&&
countNum[
3
]
==
0
)
159
{ }
160
else
161
{
162
countValue
=
eval(countMethod[k], upValueB, (
float
)countNum[
3
]);
163
if
(Math.Round(countValue,
4
)
==
24
)
164
{
//
如果已经得到24点,则结束本程序
165
result
=
"
((
"
+
countNum[
0
].ToString()
+
countMethod[i]
+
countNum[
1
].ToString()
+
"
)
"
;
166
result
+=
countMethod[j]
+
countNum[
2
].ToString()
+
"
)
"
;
167
result
+=
countMethod[k]
+
countNum[
3
].ToString()
+
"
= 24
"
;
168
isTrue
=
true
;
169
return
result;
170
}
171
}
172
173
//
第三种情况 d (方法) (a,b,c的结果2)
174
if
(countMethod[k]
==
"
/
"
&&
upValueBakB
==
0
)
175
{ }
176
else
177
{
178
countValueBak
=
eval(countMethod[k], (
float
)countNum[
3
], upValueBakB);
179
if
(Math.Round(countValueBak,
4
)
==
24
)
180
{
//
如果已经得到24点,则结束本程序
181
result
=
countNum[
3
].ToString()
+
countMethod[k]
+
"
(
"
+
countNum[
2
].ToString()
+
countMethod[j]
+
"
(
"
+
countNum[
0
].ToString()
+
countMethod[i]
+
countNum[
1
].ToString()
+
"
))
"
;
182
result
+=
"
= 24
"
;
183
isTrue
=
true
;
184
return
result;
185
}
186
}
187
188
//
第四种情况 (a,b,c的结果2) (方法) d
189
if
(countMethod[k]
==
"
/
"
&&
countNum[
3
]
==
0
)
190
{ }
191
else
192
{
193
countValueBak
=
eval(countMethod[k], upValueBakB, (
float
)countNum[
3
]);
194
if
(Math.Round(countValueBak,
4
)
==
24
)
195
{
//
如果已经得到24点,则结束本程序
196
result
=
"
(
"
+
countNum[
2
].ToString()
+
countMethod[j]
+
"
(
"
+
countNum[
0
].ToString()
+
countMethod[i]
+
countNum[
1
].ToString()
+
"
))
"
;
197
result
+=
countMethod[k]
+
countNum[
3
].ToString();
198
result
+=
"
= 24
"
;
199
isTrue
=
true
;
200
return
result;
201
}
202
}
203
}
204
}
205
}
206
207
return
""
;
208
}
209
210
private
float
eval(
string
method,
float
a,
float
b)
211
{
212
switch
(method)
213
{
214
case
"
+
"
:
215
return
a
+
b;
216
case
"
-
"
:
217
return
a
-
b;
218
case
"
*
"
:
219
return
a
*
b;
220
case
"
/
"
:
221
if
(b
==
0
)
222
{
223
return
a;
224
}
225
else
226
{
227
return
a
/
b;
228
}
229
default
:
230
return
0
;
231
}
232
}
233
#endregion
234
posted on 2006-11-06 13:44
白开心
阅读(1448)
评论(2)
编辑
收藏
引用
所属分类:
.Net(学习ing...)
评论
#
re: C#计算24点
2010-02-26 18:10
temp
这方法有点不完善,比如11,3,1,6这组参数就算不出结果来,但实际上(11+1)/3*6=24。
回复
更多评论
#
re: C#计算24点
2010-07-04 20:15
tnj
@temp
你自己试试下,这个肯定是可以的
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © 白开心