下沙论坛

 找回密码
 注册论坛(EC通行证)

用新浪微博连接

一步搞定

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 9075|回复: 47
打印 上一主题 下一主题

有没有人想过怎么用计算机来实现24点

[复制链接]

该用户从未签到

跳转到指定楼层
1
发表于 2004-4-27 17:53:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
就是扑克里的24点游戏,4个数,+-*/得24……
6 M4 T* N; S( F, P
  V) B6 D0 e" b: U$ i" s( g: M5 G5 {偶还在想……
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩 转发到微博

该用户从未签到

48
发表于 2004-5-13 20:41:00 | 只看该作者
我想了一个特征码:3 M1 B7 Y3 M* D$ B8 ]4 `
取每个操作数所进行的运算符
$ ]/ [% A' o- O8 F! C即:
' ?+ z6 h9 e" v; f+ F" V1 [1*2*3*4
* L" T+ \9 _- `各个操作数进行的运算分别为:
- B6 L  b. j* P9 l1 }# k7 Z% _0 U1 */ _$ ~& d# C8 a" Z+ Q
2 *& S& H. D1 p) m3 _5 P1 _, k" d
3 *
3 e, Q$ W' @% Y! ^. K7 |4 *6 ?$ z, K/ Z$ o  {. f3 ?
特征码为****+ a. v# l5 s. p1 X0 ^5 ?" t4 F  u- b
(1+3)*(2+4)为$ m/ c7 w1 N, L3 a. _5 W
1+
6 {; {2 A( e$ a* W# z' U, T& F3+) G6 C& b" l) b8 G. Z1 L; o- ?3 ^
2+3 x4 N! B) R: w7 p8 r) m" a5 S0 p
4+
; {5 o- ?. O. U' v' T9 A5 o5 I为++++  a' h" _6 u- B/ s' n4 B
2/(1/(3*4))
( J! \* K) U: d4 O  g2/
9 v5 ~, G6 y# g3 C1/# R( U" q5 _% s3 ^& C3 d
3*
( x3 G7 {0 R6 W: f8 r9 x! z4*
7 Q- i% K( R# e9 P% b为**//0 L4 j& f4 }) M" B: l9 U* X2 _8 m
隐含特征码为四个操作数和运算结果,因为相同,所以除去- l9 I# i+ ?/ i) o" m
目的是消除因加法和乘法交换率引起的重复
4 g6 M+ ]( x4 j0 `: g$ o; F+ b不知道有没有漏掉的,或者误除的
2 A# A1 |; \' H: T+ d, ]/ W; }, ?6 x% L3 i: \' f5 [. E' [; H
; V/ J' _6 k* x/ s' S
[此贴子已经被作者于2004-5-13 20:43:35编辑过]
) q) @: k; S+ I3 }

该用户从未签到

47
发表于 2004-5-12 19:03:00 | 只看该作者
2)检查前面 / 后面的运算,如果与现在将要进行的相同则继续检查前"面"生成的特征马的"后"面一个操作数/"后"面生成的特征马的"前"面一个操作数,"前"面生成的特征马的"后"面一个操作数>现在的"后"操作数 / "后"面生成的特征马的"前"面一个操作数>现在的"前"操作数,则跳出运算 (5月13日注:这规则是在前后都有计算过的运算时) ! k6 [7 L! u. z5 ]- A ↓修改 ↓ (5.13.2004修改) & o* A5 {9 N D( r( i5 m3)"+"/"*"作运算时"前"面的运算级别与现在将要进行的"相"同则"前"面的运算的"后"操作数必须是>=现在将要进行运算的"后"操作数,如果不符合则跳出运算* G' M1 }" I1 [( p+ z$ p! d* L ( _/ t# u( B1 n& H: y0 [0 p, |; p 4.2)"/"检查"后"面的运算级别<=4,则在相应操作数串上+() 如果认为/(a/b)=/b*a /(a*b)=/a/b 则"后"面的运算级别=4或=3跳出运算 (我认为是相等的)# s D. c( u$ c8 P5 {, v7 j+ R [ 7 I5 l/ q3 r Z6 x. o. B# t8.2)为了避免6*3*2和6*(3*2)6*3/2和6*(3/2)...重复,"*"后面有"*" / "/"跳出运算 . F% z. u8 w* o V- Y8 S u6 c. r; q* c更见规则,你给出的狮子只有4*3*2*1是合法的,其他狮子舞发生成特征马 0 W% u" X9 u0 h l* V' H% ] 4*3*2*18 e: X# c% Z7 i" ^4 U7 Y 次序:1,2, 3 0 I5 s$ B5 U/ f0 K- u2 s运算 *(3) ,*(3),*(3) 括号内是级别* I2 ~" Y- |8 P9 J/ ] 4*3=12 -> 4-3-3 结果12 9 H. V2 f ^$ W1 ^3 o12*2=24 -> 12-*-2 结果24 % ~( [) k7 w9 p. h9 {, z24*1=24 -> 24*1 结果242 h- g0 J, {, T8 N: X. l ↓ ↓ ↓ 都是级别( B; s; `) f) s6 i 最总特征马4-3-3-12-3-2-24-3-1 ; i' p: p+ Y/ t2 U& l 4*3 12*2 42*1 2 j( M- Z4 D! {& g6 n4 W" w! D' I6 l: B 其他可以得到的特征吗(还有其他我原来里出的规则)% M5 R, b0 n+ |7 a: V' R8 x 4-0-2-3-0-1-6-3-4 (4+2)*(3+1) + q/ H; \9 I& R3-0-2-5-0-1-6-3-4 (3+2+1)*4 : H9 }' F) X) c) T' k

该用户从未签到

46
发表于 2004-5-11 12:15:00 | 只看该作者
不太明白,比如, a9 Q( h* I% r0 `- R$ Z
1*2*3*4
4 |) I! p% f1 m9 a0 t. S2*4*3*1
1 T2 N# g4 @# p/ k) R! G. H" d' }2*1*3*4
( N2 Q: o3 v& Q6 w5 J# G, \' a2/(1/(3*4))
+ W' K2 w4 m& N4 N) a4 ]1 G& y3 X4 l) a0 q
的特征码是多少呢

该用户从未签到

45
发表于 2004-5-9 12:21:00 | 只看该作者
给游侠无极限4 ^( X+ H Q7 r3 z 定义0 J" X8 {7 k+ r3 g3 H 操作数: v1,v2,v3,v4 就是4个数字+ D9 W9 }* A* }0 L W, C 运算次序:px,p1,p2,p3,px 计算的顺序,比如9*9*9*9是6,1,2,3,6 || 5*(8+9)/3是6,3,1,2,6 等等; e7 v2 M0 C* z& u E1 ^1 F+ E 运算x,o1,o2,o3,ox 进行的计算" Z1 K$ Q, x0 U( |* |7 a 操作数串: s1,s2,s3,s4# ]# k4 K- J6 i 特征马: v1-o1-v2-v12-o2-v3-v123-o3-v4 这是按照p1,p2,p3的次序且v1>v2,v12>v3,v123>v4 Y' B+ N3 \2 U" ? L" ]8 H. Z; T8 ?( ~" J* j次序px=6 / t2 P* ~, `. {: _, h6 I" c运算ox="="' m$ \6 K( D# X& f a 5 N3 l- h! m% T6 k% ~- W4 t' ?1)次序为 : "()" > "/" > "*" > "-" > "+"/ b4 j5 [' E" a7 k8 } 相应级别: 5 4 3 1 09 Q7 n/ t( |. V* b5 P" H 2)检查前面 / 后面的运算,如果与现在将要进行的相同则继续检查前"面"生成的特征马的"后"面一个操作数/"后"面生成的特征马的"前"面一个操作数,"前"面生成的特征马的"后"面一个操作数>现在的"后"操作数 / "后"面生成的特征马的"前"面一个操作数>现在的"前"操作数,则跳出运算 (5月13日注:这规则是在前后都有计算过的运算时) + U$ e3 {/ m3 m- |: K3)"+"/"*"作运算时"前"面的运算级别与现在将要进行的"相"同则"前"面的运算的"后"操作数必须是>=现在将要进行运算的"后"操作数,如果不符合则跳出运算 . G+ q; ]" e1 c) j! l4 w4.1)"/" / "*"检查前/后面的运算,小雨当前运算级别超过1,则在相应操作数串上+()- X3 ?; N8 e$ S5 Q+ t/ k( L( \ 4.2)"/"检查"后"面的运算级别<=4,则在相应操作数串上+() 如果认为/(a/b)=/b*a /(a*b)=/a/b 则"后"面的运算级别=4或=3跳出运算8 @6 a3 ^2 _5 K3 R: f 4.3)"*"检查"后"面的运算级别<3或=4,则在相应操作数串上+() 7 f3 ?9 x$ t$ c7 {* b# O1 S6 S4.4)"-"检查"后"面的运算级别<=1,则在相应操作数串上+() 如果认为-(a-b)=-b+a -(a+b)=-b-a 则"后"面的运算级别=1或=0跳出运算4 K) D; A! N5 Z. d0 `5 X9 p1 f 5)第2,3次运算结束时这次运算的运算代替次序在他之前的运算的运算" |) F' A' \6 I* x/ U: \ 6)王成一个表达时的计算时应当分别保存特征马和最总的操作数串(完整的表达式串)在一个容器之中,已经存在相同的特征马则应该放弃现在的特征马和最总的操作数串(完整的表达式串)+ d" ^# S4 L3 f9 n* i8 l/ N r 7)如果认为*1和/1是相同的则两者只能选一,(禁止(当...时跳出运算)*/1或/1中的一个)或(*/1或/1中的一个生成特征妈时转换为对方) 4 A2 ^' B" {4 I9 C8.1)为了避免6+3+2和6+(3+2)6+3-2和6+(3-2)...重复,"+"后面有"+"/"-"跳出运算 ! A( q$ J* P& Y; g, C% T' \5 D$ G4 v8.2)为了避免6*3*2和6*(3*2)6*3/2和6*(3/2)...重复,"*"后面有"*" / "/"跳出运算9 x6 D0 V2 G8 C% {; C/ e% t- L n 5 E5 W# z: s8 {. {) G# F" l6 W7 A一个特征马的存储形式:char[n,7]={{v1,o1,v2,o2,v3,o3,v4},...}! G4 t+ @, I9 P$ j ) b8 r, x- r. {* k7 T这里所有跳出运算都可以通过改变前后的特征马而不跳出运算,但是那样很麻烦 3 X3 V1 w. |! ~, @' q- _- w% p这个产生特真马的前提就是我的代码(规则是比较乱的)的前提,这里只是描述的相对清楚,特征马就是我的代码中允许的表达时的计算过程,所以我的这个铁自可能是多余的 5 W6 A! F3 j& O& U0 ? - K) l. X9 ] i 0 L$ l8 ^8 o$ Z, B* ~2 @& b****************************************: S; T, N0 J, \! C8 B2 b' B' F( ` 例子1: 6 ]! H& F4 @' M; B7 e, M次序左右的6 ; q( `( J& p* }* P) J8 V# L运算左右的= 5 W+ F) s& r5 h# Q0 a3 R+ D% v省略了 $ b9 [! J; a8 L) A9 v6 }' S1 [****************************************+ R; J5 w( F3 T4 x3 c6 I 操作数: v1,v2,v3,v4 . z# K5 A" t5 Y! w% w运算次序: p1,p2,p3 2 J: P0 Z, z$ y7 m" q1 B 运算: o1,o2,o3* k3 C* N O# I, g! W! w 操作数串: v1,v2,v3,v4 # y) @5 j" C1 W, R+ N# q) H6 I# a/ F* W( l) w0 C& u 下面是计算 % T5 W& g9 M6 B# r原操作数: v1,v2,v3,v4 9 W9 f" u' c6 K2 N3 X8 n% I一次运算: v12 ,v3,v4 2 }/ j# p/ K. K) J7 C9 p& F运算次序: px,p2,p3 4 Z* H N/ l; s7 l- {' c5 [ 运算: ox,o2,o3 3 x1 o1 h4 n! d1 P k9 V操作数串: v1p1v2,v3,v4,v4 j: C2 |7 A% ~$ T( { # t8 Y3 z; a5 {4 X' f$ l9 }二次运算: v123,v4 T- Q6 y+ l8 b4 e3 }" W' E- c 运算次序: px,px,p35 f, ~8 p% S! y' z 运算: ox,ox,o33 c! F9 t- D q7 B n 操作数串: v1p1v2p2v3,v4,v4,v4 5 b9 @5 q: B) H2 L ) b2 d; u9 ]; o/ k% w; J三次运算: v1234 # r( `% l T6 I. w# d% |0 L运算次序: px,px,px - M4 ]: \8 T6 P% e 运算: ox,ox,ox7 H: v; l( e# b) o& Z 操作数串: v1p1v2p2v3p3v4,v4,v4,v4 7 K# ?7 S( t# H% C+ P9 Q: P0 O & q# F) @. N) H. x, x% H; g, w下面是特征马+ i" F, k: H) \ v1-o1-v2-v12-o2-v3-v123-o3-v4 , g/ R" t. B! d) _* _这是按照p1,p2,p3的次序且v1>v2,v12>v3,v123>v4 ' w( q( e- G& @( t" ]% A/ `' n 7 ?6 X$ T, K1 O# w/ i最总的操作数串(完整的表达式串)3 c- e$ A. C$ V! p9 E; ^6 J v1p1v2p2v3p3v4 - X' [( e+ e* [) m& {# i8 _/ N% T****************************************. e5 j X P, a% T0 i 2 `* ]- n4 t% S3 o# W1 {( K* I- q6 I! S9 a" D. L2 ^! _ **************************************** 3 j( f% ~1 M; X: P- e4 Q: w4 X3 x3 w例子1的实例: 2 J4 C3 z1 j) C% P; P次序左右的6 - n2 f4 K0 W3 Y- s/ J* L0 B8 q运算左右的= 5 S, F$ P. a+ \8 j省略了 0 j3 I8 j5 x- O, W X$ S- N**************************************** ! H D$ B& D5 w 操作数: 2 ,2 ,3 ,27 l0 h* B# B, w# Z2 n 运算次序: 1 ,2 ,3; r$ K4 k$ l4 ^" z, D* x+ p+ k6 L 运算: + ,* ,* - ]) d1 z- p) T& R/ F8 F7 A操作数串: 2 ,2 ,2 ,2 8 r* ?2 R$ w" F3 Z+ D就是: (2+2)*3*2# W- l* j+ Z9 N 7 S5 K0 d4 I9 C下面是计算 4 S, K1 o$ R% C# P; `原操作数: 2 ,2 ,3 ,2 0 M, E- F7 J4 Z2 ]一次运算: 4 ,3 ,2 3 s$ r; L& w. B: ~ \$ }运算次序: 6 ,2 ,3 o2 [" T$ u$ m/ {$ E 运算: + ,* ,* 生成2-+-2, ]8 ~6 K7 E( w3 x% m3 U8 O 操作数串: 2+2,3,2,2- w8 N1 h. J8 k- H1 U7 P * w5 \9 H5 t3 d( Z# e; y2 {二次运算: 12,2 9 j& y; ^" F1 t4 u) g运算次序: 6 ,6 ,3) U7 ~5 ]8 B7 G+ w+ k/ O. s 运算: * ,* ,* 生成4-*-3 o/ d+ j8 U$ R* _) s6 X 操作数串: (2+2)*3,2,22 加上括号) j# M5 o% h. U: V: a. r k4 r& s$ ~! C0 ]; G/ n. w 三次运算: 24 . }5 m0 @: j- m+ X运算次序: 6 ,6 ,6 + l4 Q5 ]: U+ Q3 Z l 运算: * ,* ,* 生成12-*-2 9 \5 e* m8 N; f& V- A. S0 T操作数串: (2+2)*3*2,2,2,2 _! f% N2 B& s( B % o, A5 j3 C0 L l/ B; O 下面是特征马 1 _' N8 ^" a* K) K% M2-+-2-4-*-3-12-*-2 , ~3 r1 T" O/ Z7 L按照1,2,3(就是次序)的顺序 ; m0 l6 ^+ I. i, |/ B; Z( y5 n0 c; r4 a 最总的操作数串(完整的表达式串), n# W1 \) O) G5 z* U% @ (2+2)*3*23 M$ H3 s1 ]! ^- X7 Z- h5 t ****************************************. o& u! [* G- G( r6 d( K+ P+ l & Y' M- p7 h( b再比如2*(2+2)*3( E: l0 K! X3 d- C 特征马 * U) G+ L) M' F/ i9 o+ C8 k2-+-2-?-?-?-?-?-? ; V$ T: f/ w' x4 u9 `, L后面跳出了计算,这个特征马/最总的操作数串(完整的表达式串)应当放弃 8 O1 o1 H6 ^2 N5 s和(2+2)*3*2不会重复 0 ]9 r" Q$ a( ^7 R6 L- q5 S; I' k0 b" V. Q2 Q( O% [ 再比如6,6,6,6 ) @8 ^$ ?7 @/ T: g7 d3 s. F" T4 Z _可以生成的特征马+ ?0 i. _ \5 n& U 6-+-6-12-+-6-18-+-6 3 @% c$ g' s/ A' o `* c: T6-*-6-36---6-30---6 1 |0 u& z- N# u+ t* Z1 h* q% P' B5 F' @" Y- o6 N' `7 h 再比如12,12,12,12 & F- Q8 T/ g$ ?7 t; H8 ]; Q可以生成的特征马* x, e/ g. n1 x4 k+ A& F) m 12-+-12-24-/-12-2-*-12! v( A5 w' S/ h7 `* o/ ^. F 12-/-12-1-*-12-12-+-12% D5 h% }; P: G! }9 n 12-+-12-12-/-12-1-*-24 0 x/ Y3 G$ M, y$ [. h9 U& C4 {" p: k. F4 c * z# V7 ]( j: I9 b5 @( q 2 F8 x# [2 Y9 d, p: l ! I* `# |8 u* b; g- g; u2 f " D! ~( w/ x, w B- k . E+ c3 s- H! H! n5 A, S ! c6 Y6 u, c3 R3 H0 I e' x0 Y& h3 i, b ( A2 I7 Z% e# ? 0 Z' F! `2 M$ P2 N- h, |/ a / B- ? B/ t1 n * f, Q8 @. @, R( _# O$ p
[此贴子已经被作者于2004-5-12 19:06:09编辑过]
+ w, f& q% u3 @ d V6 x( |9 G

该用户从未签到

44
发表于 2004-5-8 21:11:00 | 只看该作者
以下是引用hzzh在2004-5-8 17:31:09的发言:& e; X+ M; `) j- C; X* _& b; F# K 这个题目不容易呢,好多高手都出马了,不错不错,不佩服的不行。 / L) I8 F X3 X% F y& J* x 来了点好奇心,对游侠无极限 的程序运行了一下; P% q7 S/ r7 L" M% @1 O+ ?' ` 算法还没有看懂,为什么结果会都是重复的?2 j7 S& B9 C8 Q8 L4 z- ]' B6 p6 c/ ?. f3 P. x4 e; c$ A# R1 e) L. e 请输入4个数(用回车或者空格分开):5 5 8 8% v h( {; F: u6 f0 ]9 K 5*5-8/8 $ x0 x2 h+ A2 J2 `. Y, R- n 5*5-8/8 % u9 Y) Z% S+ }3 Y4 H 5*5-8/8 % b/ E% v9 N& A- b; Q: K 5*5-8/8 8 t- E2 T) r' H5 T2 [ 总计4个式子8 p! {0 K) N, K5 b& e: {( |8 Z0 M5 J9 _1 E1 o1 v5 `' S2 g 另外程序有一点点小错误:) b3 n8 k Q% B" o* b* L. W3 w( p# r/ E/ S int EnumFormula(int *FormulaNum,int num,int sum). n) X/ Q) \. J) S9 U {$ R. k$ m! c7 l1 S int result = 0;4 ], N% L) X1 ^' j+ M' b int *NumSym = (int*)calloc(num+4,sizeof(int)); //操作数运算符组成的可枚举组 : c6 S4 y X5 }0 ` int *Formula = (int*)calloc(num*2-1,sizeof(int)); //波兰表达式储存空间7 `$ U7 s" h" o7 y int *temp = (int*)calloc(num*2,sizeof(int)); //波兰表达式的代号表示空间% Q- G6 `4 Q& v5 k E6 D int i,j;$ ^9 ~3 X( ^# |! a for(i=0;i = FormulaNum; //载入进行穷举的操作数 # u3 R1 m7 c# o. `5 I for(j=0;j<5;j++) NumSym[i+j] = -j-1; //载入进行穷举的运算符号 $ X5 F$ ~ K! L9 R6 v2 ?* q. Z; O5 ~9 p9 _% Q4 N 前面定义: int *NumSym = (int*)calloc(num+4,sizeof(int)); //操作数运算符组成的可枚举组 0 [8 B8 j3 ]; X' u! T 后来二句: $ A9 g3 M! B. ^6 I$ ^' w for(i=0;i = FormulaNum; //载入进行穷举的操作数 ' @3 x5 L; O9 s7 |) ~ for(j=0;j<5;j++) NumSym[i+j] = -j-1; //载入进行穷举的运算符号) q' t( }- g: |4 t3 n, \& Z. a 当num=4时,经过第一个for,i=4,第二个for中 NumSym[i+j], i+j=8,NumSym越界了% M7 E) S$ ^- ?1 E
3 Y7 _0 g( L& G1 h; @$ I( G" {% M) M' G9 \; ~7 i7 ?8 w 真是太感谢了,想必释放错误是由于这个越界啊& D( U3 {1 ]$ \ 至于重复,其实是这样的: / @) `( T1 G) C' S( Y你输入的 5 5 8 8,在穷举中,第一个5和第二个5不等价,同样第三个8和第四个8不等价,所以结果是 6 w% s8 h9 M8 S6 X& F: I 5(1)*5(2)-8(3)/8(4) c& B7 V/ h7 J 5(2)*5(1)-8(3)/8(4)( I6 w+ l" ^! O S; t0 x; x 5(1)*5(2)-8(4)/8(3)8 I" {9 g% [( c8 { 5(2)*5(1)-8(4)/8(3) 2 R1 R& K. v3 }! D0 D5 h
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    43
    发表于 2004-5-8 18:42:00 | 只看该作者
    佩服佩服,不佩服不行了,
    5 U0 Q+ l, c: l* Q  L代码越来越工整,注释越来越详细实用,
    * g# h8 y3 M% _. R真是长江后浪推前浪啊,前浪死在沙滩上

    该用户从未签到

    42
    发表于 2004-5-8 18:11:00 | 只看该作者
    ‘最后一次发代码0 c& a3 f. j4 j& D4 P0 Z / K$ P6 @! s4 R- k( f% }+ d 0 ^9 J; u$ X2 f; p' a, b( \. h, E$ d # u* x* ?: v3 M6 |6 _( y, M! z5 G \! W2 e, x 4 |4 a# F! {" A# ~7 D3 Y# Z8 O

    $ ^) `& @: W8 p* |; `+ @ 7 t$ U1 l" f$ ~: K6 A

    1 h( @3 j0 x+ D$ r9 }- D5 I6 U- S+ U( U x

    3 @% ]/ K% V+ N " a" ]; B7 d7 W- ?8 N" k& J8 N ' j& K4 s0 d0 L 3 S }1 K) |, S! i, @ ! ^4 f0 |4 r) X1 @

    ! T9 o, s; Q! Z; n

    8 u! H7 f& |9 ]8 D # b. r# ?+ F9 U) d

    , H$ j1 \- ~ }; Q - [3 x( C/ B# Y7 t) B$ j% T' l, ?" |5 x) d' l; Z1 `
    [此贴子已经被作者于2004-5-8 18:20:59编辑过]
    - V9 }: t G4 U. v5 E* B

    该用户从未签到

    41
    发表于 2004-5-8 17:31:00 | 只看该作者
    这个题目不容易呢,好多高手都出马了,不错不错,不佩服的不行。: ^: m" L+ _' W0 q* _; U 来了点好奇心,对游侠无极限 的程序运行了一下 w7 h- |) j. S. G+ k1 G8 s2 _1 [3 N算法还没有看懂,为什么结果会都是重复的?2 a$ }+ n3 {- h) B# p) f0 ]/ y( i2 g$ \5 m/ R# X请输入4个数(用回车或者空格分开):5 5 8 8 " y) w* F+ @- h, s- N5 p2 X. b6 _5*5-8/8* ~" z f1 f0 `0 ^. I6 O 5*5-8/8( K, l) e) G, W7 K# ]% [ 5*5-8/8, E- y3 J4 q) s$ L 5*5-8/8 " T& E; d5 v7 W1 G8 p' B6 a总计4个式子 : |: d1 f8 V9 [: ?/ r$ ~5 S ]0 d4 v0 X8 Q& P2 \5 y 另外程序有一点点小错误: 4 Q) j8 J* A; `3 D* F& c7 U3 ~9 d/ F0 ~# d9 Z: K int EnumFormula(int *FormulaNum,int num,int sum)- p1 M: n5 [6 V9 N4 a { T; R$ o1 f+ S% x8 K" O, Y0 Z int result = 0;6 P* o+ [8 w2 V$ ^1 O2 z int *NumSym = (int*)calloc(num+4,sizeof(int)); //操作数运算符组成的可枚举组3 b8 X' n/ R5 P/ E/ Z& l1 } int *Formula = (int*)calloc(num*2-1,sizeof(int)); //波兰表达式储存空间6 G& m" {8 r" E2 U# `' i' R int *temp = (int*)calloc(num*2,sizeof(int)); //波兰表达式的代号表示空间: M4 b3 q# |/ J( E7 A) I( y* ?7 ]/ y7 H int i,j;1 I! O& L1 E! g' z$ w! }+ [8 ? for(i=0;i = FormulaNum; //载入进行穷举的操作数! ?# d* O' V& @7 @; {' W* w! D for(j=0;j<5;j++) NumSym[i+j] = -j-1; //载入进行穷举的运算符号 ! v% e* |, F, F' \' f6 T# R" T6 X: }4 q/ N1 \ 前面定义: int *NumSym = (int*)calloc(num+4,sizeof(int)); //操作数运算符组成的可枚举组; q& o" ]! A# x1 A, S 后来二句:2 W0 m( V" u6 k" O" Y5 ?( `( [ for(i=0;i = FormulaNum; //载入进行穷举的操作数 6 d/ W# d3 j* A& m3 C for(j=0;j<5;j++) NumSym[i+j] = -j-1; //载入进行穷举的运算符号" b: y& `) l/ @7 {$ a9 t- P- Q% ] 当num=4时,经过第一个for,i=4,第二个for中 NumSym[i+j], i+j=8,NumSym越界了, U9 V/ D7 ^& U+ o w. n c

    该用户从未签到

    40
    发表于 2004-5-8 16:35:00 | 只看该作者

    几天前的东西,现在没有大兴趣了

    过重复代码过多,比如二叉树的建立等等 : w, ^+ o. {" v( J+ B, K# {# f- `- X0 j4 W #include ' U% e5 k5 [, ]* b% P#include : [& {9 s1 K7 T4 Y/ T/ u , `* R( n" P# r! |( e( e typedef struct node " c" I) `' L0 z{ 8 o. V' \: f9 \5 |/ W/ A$ Z9 S1 x* R float Data;9 Y f/ }7 r, S( u. q char Formula[100]; + ~! Y1 X- b- E1 m! G$ \' F int frist; //优先级$ D6 W. A) q2 r+ F% F* c4 V struct node *Lchild;0 N- y3 C1 r! z3 W struct node *Rchild; ! j; C& v3 c7 O( U% z" _( F8 Y+ Q2 j} BinTree; - ]. [8 q" B$ Uvoid CreatBinTree(BinTree *Tree,int *nArray); 3 i! E! m9 L7 }: [6 {: u7 q, E! \- evoid FreeBinTree(BinTree *Tree); & u, ^$ y+ A& `% q' Evoid AfterBinTree(BinTree *Tree,void func(BinTree*)); / e( l; h; i( O# a* w4 q! B' lfloat CalcBinTree(BinTree *Tree);+ }, j& g6 E9 {* N6 v# H' ? float GetFormulaVal(int *Formula,int count); 5 C& L% n3 f% m% tvoid ShowFormula(int *Formula,int count); 7 c/ e: S6 J: m. E# B1 X8 vvoid AfterNode(BinTree *Tree);8 e$ c% ?* V2 S& h! }4 x void GetFormula(BinTree *Tree);* D0 d' c$ \0 q void Myitoa(BinTree *Tree); - J/ W7 W5 g, T4 Q8 J- Vint EnumFormula(int *FormulaNum,int num,int sum);# u# j: c" ]+ P void Restore(int *Formula,int *NumSym,int *temp,int count);& J* T" S, |7 k2 x7 q$ F$ _; v int IsOK(int *Formula,int count); 4 T: e; A" d% b7 E1 f: p4 J& Gint FindInt(int *nArray,int n,int len);* Z2 v5 K0 A& q6 c4 M8 \: { int UpZero(int *nArray,int n); + E5 Z% h2 p* [5 iint IsDownNumSame(int *temp,int count,int num); " {* m7 C% }5 G3 } m) O/ C5 C. z6 |% K const char cSym[5][2] = {"","+","-","*","/"}; , I, \4 L5 S" B$ @( y* w ( f4 v8 d6 j9 t) i3 Nint main(int argc, char *argv[])9 ^# f6 d) z' S( a/ w {' F; Y( S" }# `7 U9 f4 P7 L* W int i,n,*Array;# ~. } H& r5 z! d( {0 Z ! |$ h: e8 d0 o' y- S //printf("几个数?");" H" O$ h" R) N' I$ m1 Q0 u% @5 ? //scanf("%d",&n);* \* C/ d7 I. n( G2 f/ V) b n =4; ?+ s+ X& L, }9 D) i4 G Array = (int*)calloc(n,sizeof(int));4 _; Z4 o! i6 j0 Z5 c( ]- m# H printf("请输入%d个数(用回车或者空格分开):",n);; M1 w- v# S4 _+ O6 M" P0 ]) Y for(i=0;i7 A0 Y, J: k+ b5 p$ ]) t scanf("%d",&Array); - N! F: I0 q( x printf("总计%d个式子\n",EnumFormula(Array,n,24)); : h3 O8 c( V$ P/ B! J4 Y" C p% s free(Array); 2 K# G" u4 q0 ^9 J# z+ o " L" p. t( ^' k/ f system("PAUSE"); + T, N( F3 E$ ~- D1 H return 0;5 _. E/ ]( p( E }( v: t1 _' ] M- \5 Q6 t/ ? ' D* L) G! _6 L$ R! ^( v' K int EnumFormula(int *FormulaNum,int num,int sum) V- B) x- S! S2 S! N{9 F3 x; l, c% o+ x, { int result = 0;: o2 P+ q; S; r int *NumSym = (int*)calloc(num+4,sizeof(int)); //操作数运算符组成的可枚举组 $ l* O/ j+ X# M int *Formula = (int*)calloc(num*2-1,sizeof(int)); //波兰表达式储存空间' Y3 M, q% F3 [ int *temp = (int*)calloc(num*2,sizeof(int)); //波兰表达式的代号表示空间 * s Y$ ~: ]7 b+ _- B* Q1 O E' t int i,j; ' N8 u- ]" b, R2 \" g for(i=0;i = FormulaNum; //载入进行穷举的操作数 - {# A7 k& W) d. H7 Z for(j=0;j<5;j++) NumSym[i+j] = -j-1; //载入进行穷举的运算符号. `, o8 ]0 F' |5 b/ w I% ~ 4 V2 s% E& S0 \- |3 G0 s; B! r9 z5 F for(i=0;i = 0;4 x& B3 T* J$ i- N6 \ // 穷举开始,结束的标志为波兰表达式代号空间最后一位已进位,即前面各位已穷举完成 0 q/ g- D7 Y* V6 M' ]9 X6 |( M5 Z while(temp[num*2-1] == 0) ! U: [- z( o) M5 |8 m5 \. x- a { ) }$ J5 h' u& C; C5 b5 q, R if(!IsDownNumSame(temp,num*2-1,num)), Z6 |; i* y B/ R! l: ], M4 n {# K. a* Q% f2 C5 F Restore(Formula,NumSym,temp,num*2-1); //还原波兰表达式7 o( e; e' m7 w9 D6 } if(IsOK(Formula,num*2-1))9 C) O3 W: N% n( O* V { ( Z, }1 w9 g4 d" O5 j$ U6 m float t; //结果偏差( u& K' g( ^5 F# | u t= GetFormulaVal(Formula,num*2-1) -sum;+ y* Z6 x! v, C/ v i! h$ R' \ r if(t>-0.01 && t <0.01) //结果为浮点数,只能进行近似比较3 t5 W5 a2 Z4 A4 X4 F" |1 M {% k& K7 H8 ~" B result++; k6 I& Z. o) u; b' K) _4 y ShowFormula(Formula,num*2-1);# {7 J. \; a' U; E# P }+ K. ^' ~; m# {# } A& b: ` } ; }) Y. _2 V( u; I9 r } 7 C' G# w& }8 k r temp[0]++; //穷举动力 P- g- x0 R# e O0 z for(i=0;temp > num+3 && i//代码空间类进位4 j3 Y$ k; r; e7 o' n {# v8 x7 q. P# b1 I0 s9 L8 n temp =0; - q) ?; _7 P4 x! `) X& d1 V temp[i+1]++; 1 ~5 |2 m3 O" M" g8 L+ V0 O } 0 U: z2 m! q2 S) M( G } ! c. t# ?% G7 B9 w% k% A7 t$ V // 释放内存+ Z$ O s \9 q2 h! } free(temp); 0 [' t D0 c% N/ p % h Q4 p" `/ a, Y, U //free(Formula); //??此处不知为什么会出现错误' y5 L4 _6 \; o5 o) i free(NumSym); ; W0 g" _. Z$ p return result; " ^8 Q( d6 R$ M$ W: u7 X! T- j}7 S' S, a. I' ?, x6 \+ j1 g // 由代码表还原为波兰表达式, l. l- ^' p- X. e0 i void Restore(int *Formula,int *NumSym,int *temp,int count) 7 F7 }8 a h G' M$ i3 J9 M{ F6 G- A9 |+ X# v* Y+ y& b0 W int i;# n n/ N4 d5 L0 I, L for(i=0;i = NumSym[temp]; 2 V" I3 q v( [1 D2 _ X8 l' G}* A$ c. d- o9 M" j% S- r* e8 a // 判断是否符合波兰表达式 % h$ m3 ^ }& W& v// 符合的条件是每个运算符号前必须是操作数个数多了运算符个数 3 [# J+ b' R2 t4 z8 `% E. r' s* o// 且运算符个数为总数减一的一半, {2 {* h) q+ N, U- `6 s7 } int IsOK(int *Formula,int count) 4 d, ^# R* |* Z {8 x; `{ H6 L! |- G! S int i,j;6 Z: y8 ^1 s/ X# l for(i=0,j=1;i) U6 z) `5 \ s5 }" Q$ F! S6 p if(Formula<0) 1 r- n A' T g if(UpZero(Formula,i)>j) j++; - G$ c# i3 ^+ ^2 X" L' C else break;7 d0 B0 G/ h. x4 G8 b( Q: ^ if(iint)count/2+1) return 0; 9 z7 K6 ~" e; s, N3 F0 K else return 1;, Z& E& o3 f, H0 E4 H }3 Z) S# d y( b! D2 x // 查找数组大于0的个数 % e% y9 M6 s. _! e% a" Z' Kint UpZero(int *nArray,int n)) e0 t0 ~4 _( T8 U" [ {, F: ?, n; N1 C9 u9 _ l int i,result=0; G; r( |+ v/ i3 R5 S6 m: c for(i=0;iif(nArray>=0) result++;- C0 X! }: Y# k4 ~# n) ]4 K return result;' Y& x/ |- N9 V. Q; K8 o4 v } M; G# d" H) a6 d9 d // 查找数组中,小于Num的数是否有重复5 y0 G- G) n# Q T! D int IsDownNumSame(int *temp,int count,int num)9 K8 @( R; \$ X. W3 h { 4 g2 x; g5 h. l/ J int i;9 [2 R: X# J0 F" R! g8 W for(i=0;i+ w i# Q+ }8 g* [) x# _# o: S { : U' y6 n( r! j/ J1 u0 d if(temp < num)( l# O) L" E; { if(FindInt(temp,temp,i) != 0) return 1;# O# m: T' R, V! T$ [! J5 `# I }( {2 C* M( _" d* B0 i5 h% i return 0; ; b4 z/ v, l& w1 S( K} 0 H5 {% n: z0 i; L+ j6 A& t// 查找数所在数组的位置,返回0为未找到6 t+ b3 Q7 u) y9 }) C int FindInt(int *nArray,int n,int len). q, w& U+ q9 H { 9 O/ k- G! n4 P$ Z! Q int i;9 U4 C# t' v3 V6 c1 @ for(i=0;nArray != n && i8 B' m) q! I0 Q) q \" } if(i>=len) i=0;5 ?( s7 F8 _% p6 Y/ q+ y9 x else i++; 0 R( _3 k+ @6 N* ~6 X. r% c" l' y; X return i; % t8 x( n7 {+ e+ G9 Z7 P0 K% n1 c}7 v+ W1 x: H* a : E) ? g# [/ P6 d# @ // 计算算式结果 0 Y$ n8 a! n ]0 ~float GetFormulaVal(int *Formula,int count) - o# O2 G1 B. O: A6 N ~% u{; H/ B. i( y" b$ _5 I2 m3 G float result; ) X9 F+ \' N" S8 W BinTree *head = (BinTree*)malloc(sizeof(BinTree)); //二叉树头节点- M3 T% {# M% u7 a int *nArray = (int*)calloc(count+1,sizeof(int)); //波兰表达式储存数组,首位表示数组有效长度 " i: j- |, E& d6 S( M& z+ ` / L0 y2 \ V4 u0 G- d1 u; h8 f int i;9 H) h4 G& T& _8 \. K8 v8 s' s0 w* ^ for(i=1;i<=count;i++) nArray = Formula[i-1]; //复制波兰表达式* T8 m0 G( X& [& q& { nArray[0] = count; * l, G( H8 O6 ~ CreatBinTree(head,nArray); //建立二叉树$ o$ b/ r, W& M( _9 {% ?( A * w( a% R Z/ }& }- y1 } result = CalcBinTree(head); //计算二叉树算式 9 V$ t0 l' y4 {2 x1 b AfterBinTree(head,&FreeBinTree); //释放二叉树空间% U Y; r F# ]! S% }3 l " k# K$ H" w* f5 X; X- h9 Y0 ] free(nArray);, f5 I+ J$ a' v" Y) ]# J- X: e3 r8 A return result; # {) e' m# T. R0 X4 L}, Q' G1 n! U" C+ x) ?- |' E float CalcBinTree(BinTree *Tree) ' L, ?- r7 K; W" Y9 v' k. R{ ; G8 v% f- M W/ k2 [ " L3 F$ I0 \: g; x# Z( r; g AfterBinTree(Tree,&AfterNode); 7 U( ~" R" t& W7 Z; n5 C8 p return Tree->Data;" I& }6 O2 @7 N, M+ W }( g! S# C+ ~0 i" s, X: Q8 [3 i2 i 9 k# V/ X8 s: T X // 后序遍历二叉树进行计算,但会破坏二叉树本身& }; a& s3 G' h1 Z* Q+ | // 一个结点的结果为左子树 (运算符) 右子树 9 O, Y* Q/ `0 f, `void AfterNode(BinTree *Tree) R' l7 h5 Q' \ {" }6 i2 u! X9 R1 g switch((int)Tree->Data)9 _9 _8 O5 b! ]' O, i { ; Y# Z! D, t- a/ Q; s case -1:2 s: n3 M5 j8 B6 ]3 v* A Tree->Data = Tree->Lchild->Data + Tree->Rchild->Data; 0 o% }, H- J& W$ j break; " y( A5 b' b# r3 W+ @/ z case -2:% U8 K' F5 i( P" s5 p Tree->Data = Tree->Lchild->Data - Tree->Rchild->Data; $ U8 { `/ r7 m j2 C break;! `" j# B. f* d, n case -3: ! R9 C: T8 X# O2 @: X; B Tree->Data = Tree->Lchild->Data * Tree->Rchild->Data;3 W) C8 L* l" }3 t+ ?# [3 D break;3 F" W8 w) e1 w/ I0 N, R* V* D- b% k case -4:; @. z1 a4 ~: r9 A) v( y& o6 a" q Tree->Data = Tree->Lchild->Data / Tree->Rchild->Data; $ X- G1 s! n2 Q& U break;4 t j2 Q$ c# h7 i } ) a- }7 x& e! Z! t( I} 6 e/ O# q0 @- b- k' {# L; v// 打印算式9 U0 B" x3 j& x/ Y2 M 2 L" e! J: ^3 P6 c* B/ x. mvoid ShowFormula(int *Formula,int count)$ L: I1 u! v, ?) x1 V6 o1 X { * T% R8 H- f, Y3 m7 s4 w BinTree *head = (BinTree*)malloc(sizeof(BinTree)); //二叉树头节点 9 G; K; Q" [ X* J8 G int *nArray = (int*)calloc(count+1,sizeof(int)); //波兰表达式储存数组,首位表示数组有效长度( p$ ]! D, N1 \, O int i;$ L) p, e5 ~+ f% j7 O for(i=1;i<=count;i++) nArray = Formula[i-1]; //复制波兰表达式$ d; V1 j0 {8 i4 @1 O% U0 X. r5 E nArray[0] = count;+ N0 G s; A9 V9 ~3 a7 q CreatBinTree(head,nArray); . h' m. }% ]: n* L @# ? AfterBinTree(head,&Myitoa); //初始化二叉树字符窜部分 ' x4 p! S3 Q2 H" P3 y- P0 r0 Z AfterBinTree(head,&GetFormula); //转化为普通表达式8 C; C$ ]4 U) W, G. s& t printf("%s\n",head->Formula);1 E! Z$ g. p; z/ V/ [$ p; } AfterBinTree(head,&FreeBinTree); //释放二叉树空间 ! Y4 C# a6 m0 c7 G) ]$ w free(nArray); % u. _5 P" A! n( f7 t ; q4 G2 A! n4 e4 F: b, C% j8 @' B- B, S } 4 k. f& i- k0 k: ~# f( p// 类似计算二叉树! s7 j! p, V7 r3 C // 会破坏二叉树本身 % Z1 y6 x4 g9 g( @3 Dvoid GetFormula(BinTree *Tree) 7 {8 H+ c& A$ c4 B# Z{3 {, {# z$ v0 z1 y2 Y1 V1 v7 L5 A; x // printf(Tree->Formula);# E. Z9 @/ \6 Y if(Tree->Data <0) O# B8 |8 |7 M4 r; B% Z* `" C {6 h- R N( `9 a, `4 |/ N0 G! p char temp[100];# _& A4 \: D+ i$ q if(Tree->Lchild->frist < Tree->frist)8 l! d: e$ o7 h+ } { w& g- k+ |2 Q) h strcpy(temp,Tree->Lchild->Formula);( y: L6 P8 F4 o0 L strcpy(Tree->Lchild->Formula,"(");- K2 b% I% {. w# `( @& M strcat(Tree->Lchild->Formula,temp);5 N5 z: W# b: l strcat(Tree->Lchild->Formula,")");3 Z- }+ v8 D" }: X4 T% S } 3 R0 t* ?2 Y2 V% s d( @- f* [ if(Tree->Rchild->frist < Tree->frist 2 _# m. ?0 Z. l6 ~8 u5 t* Y || (int)Tree->Data == -2 && Tree->Rchild->frist == 0 Z1 @0 | a9 ~ || (int)Tree->Data == -4 && Tree->Rchild->frist != 2) " J" B$ \- w$ ? { * U% I, ?, t# I j8 W# d5 L' J strcpy(temp,Tree->Rchild->Formula);' s; K# k! K5 R4 I strcpy(Tree->Rchild->Formula,"(");: K! E* _5 I X# r. j! v9 ` strcat(Tree->Rchild->Formula,temp);9 L1 g1 d" z2 B- t5 c strcat(Tree->Rchild->Formula,")"); 2 x& w- f' H/ ]8 O }) `# F$ x l7 Z* Z strcpy(temp,Tree->Formula); 7 k7 b* J. t+ B V* [" J strcpy(Tree->Formula,Tree->Lchild->Formula); n3 h; _- N$ b- M# z strcat(Tree->Formula,cSym[-(int)Tree->Data]); " B8 c8 n# |% P. ? k( Q strcat(Tree->Formula,Tree->Rchild->Formula);) m$ E2 S- m2 M5 {" d" Q' ^ }4 ~4 ]7 i- B" |1 d) V/ H" ? } 0 E( b; h7 o2 v7 [8 y// 对二叉树字符串部分赋值 1 W; a" J9 L0 L- F: j0 Z! Z; o( Lvoid Myitoa(BinTree *Tree) ! a/ t0 t0 f! B7 j) s{! g; i/ n8 L. b1 I7 W if(Tree->Data>=0) 3 |- N8 l; k) P+ L2 X' S7 L4 M {$ O/ k+ g8 T0 G8 G itoa((int)Tree->Data,Tree->Formula,10); ( R8 s" d; s | Tree->frist = 2; . O8 N9 p8 c" C4 p% q/ u2 N } , D, O$ v0 A% D/ c else 6 B1 T) a# V1 f2 V7 ]( L- Q5 K {2 p. k6 C: I& s Tree->frist=Tree->Data < -2 ? 1:0;2 L! U. S7 g0 \' L9 ^/ m+ q strcpy(Tree->Formula, cSym[-(int)Tree->Data]); S0 p& ]+ J( C5 U1 ^ //Tree->Formula[1] = 0; 2 J% S+ A" Y! N- k0 o2 W }) x9 f `' \8 _- i } . x$ ]# J* C6 u2 i//从一个波兰表达式建立一个二叉树链表,需指定一个头节点 + U: J- c! w6 r0 C$ f- M8 q% @9 {void CreatBinTree(BinTree *Tree,int *nArray) . J" F8 e+ R+ w6 ^& y6 r{6 a# P" }0 u; b2 K' t Tree->Data = nArray[nArray[0]--]; % i/ ?/ q* X% n1 ~: P- t if(Tree->Data < 0)( X" k! e- }- `2 K' r { 6 E' f& n9 r5 W4 s2 B7 S Tree->Rchild = (BinTree*)malloc(sizeof(BinTree));9 y1 z1 f7 h# g CreatBinTree(Tree->Rchild,nArray);! _4 c2 Z: n. H! i. s. `" r Tree->Lchild = (BinTree*)malloc(sizeof(BinTree));4 i3 h+ O5 q# l z( i3 v CreatBinTree(Tree->Lchild,nArray); 5 U6 z4 E, V/ e0 E8 Y }+ c4 a/ m1 u1 W7 L, Z else $ W! z0 b6 y1 \$ H6 U# m {+ U& J$ [# r+ b- C; X4 u8 K7 q Tree->Lchild = 0;7 f! B$ j+ }0 |, y- j3 |' K Tree->Rchild = 0; 1 I$ |6 G% U8 y3 d: d& C, W5 P% M3 j }: U3 s3 o" F+ H3 w% t. S5 h. ^) F# S" q ' K+ l: O2 P2 D } ' |$ l, ]' }+ E2 ^: K3 V4 w / \2 [1 v+ C- ~! f& u1 Q, Z// 释放二叉树空间3 M z# @7 J, U- I9 c void FreeBinTree(BinTree *Tree)# O# G u$ i4 z2 _) K$ W {3 s- O6 t2 R/ n1 Z- ^$ m; [ free(Tree); , u E* x, X1 P1 \9 _. f! m( d# c} 7 V' Y1 w6 p, |3 `. D4 ]# o// 后序遍历二叉树: J! ^+ B$ m) S // 方便其他函数调用,func为要对各个结点进行操作的函数指针9 R4 R2 ?/ @+ E. o void AfterBinTree(BinTree *Tree,void func(BinTree*)) ! c# u4 w8 N/ D- R: ~! _# K; n{ ' d) O+ v9 b M8 r; D5 [ if(Tree) ~4 V# s6 O1 c { # e" ?6 |- y( P3 C AfterBinTree(Tree->Lchild,func);& s* W+ D6 w( V3 ?7 L2 G" n: N! [ AfterBinTree(Tree->Rchild,func); : o& O. H9 A. Z! v0 w func(Tree);7 A9 r4 E( |% P; `# @; R }' q) E0 u% t7 a8 g: S( F }+ P8 @$ ?* l" ~3 G8 i
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    39
    发表于 2004-5-8 13:29:00 | 只看该作者
    如果是只有4个数字,那么一共也才4!=4*3*2*1=24种,那么你全部列出来就可以了啊。24钟不算多。

    该用户从未签到

    38
    发表于 2004-5-8 13:28:00 | 只看该作者
    7 f- C0 J( F7 M: D' ~
    [此贴子已经被作者于2004-5-8 18:33:46编辑过]

    , V- _% Q5 i5 G! S

    该用户从未签到

    37
    发表于 2004-5-8 11:12:00 | 只看该作者
    请问如何实现4个数字的 所有排列方式' s' s0 I, a% L2 {# C2 W3 I$ J
    5,5,11,7的问题就在这里+ s4 E+ k8 S% p
    向5,5,7,11就有结果了5*(7-11/5)
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    36
    发表于 2004-5-8 10:59:00 | 只看该作者
    以下是引用唐明在2004-5-8 10:47:10的发言:8 W; r# k& H* z# g5 i( }" H
    这些是原始的版本代码没什么测试* g) E( D0 s5 }
    这次5,5,11,7还是个问题
    ; j0 x/ J4 X- k$ c' T  C
    我也是随便测试了一个,就碰上了
    8 q' H% ^, d6 y) W/ N/ j应该还有很多类似情况了1 T! ?7 r6 m3 Q* V& |. X3 ]

    该用户从未签到

    35
    发表于 2004-5-8 10:47:00 | 只看该作者
    这些是原始的版本代码没什么测试
    # k& Z8 _( W- m) H+ J4 U这次5,5,11,7还是个问题

    该用户从未签到

    34
    发表于 2004-5-8 10:43:00 | 只看该作者

    7 K# G' ^4 ?: a& J9 Y% N9 K
    [此贴子已经被作者于2004-5-8 18:29:04编辑过]

    * g: @7 \' t+ ?, z. V
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    33
    发表于 2004-5-8 09:49:00 | 只看该作者
    以下是引用唐明在2004-5-8 8:01:19的发言:$ a8 B" ~  ?& l+ \8 n! `
    现在是vb可,我准备修改原来的代码
    / @# {$ I" a' V# n9 M9 F
    但是你里面还有错误啊
    + @! {$ ~) [* p7 B" @. e9 t: z比如 " G; Q3 j2 m- x( l3 Q
    5 5 11 7 你的程序竟然得不到算式啊,而我用我的那个跑了一下得到如下
    8 [2 ]9 `! Z, T# |% ?5*(7-11/5) = 24
      @( _! c8 x( ?9 b; B  h2 f7 m9 R5*(7-(11/5)) = 24
    8 O( ]  A1 H1 z2 G+ g5*(7-11/5) = 24; G" h" J, R$ @3 L0 p4 c
    5*(7-(11/5)) = 24
    6 S7 G6 }  k% F' ^6 h6 e2 H' M) P2 }9 {' U* m! Y
    For 好多,注释太少了,变量干什么的我都看不出来,所以你的程序那里出问题我也看不出来,那么多for差点看傻了,还不如低归舒服多了。 加油加油
    & y1 r# L7 p: V% \$ z
    $ \+ H9 d" ^7 N7 u8 w
    [此贴子已经被作者于2004-5-8 9:50:08编辑过]

    - n8 H) o6 Z9 Q, o3 @- v. s

    该用户从未签到

    32
    发表于 2004-5-8 08:01:00 | 只看该作者
    现在是vb可,我准备修改原来的代码

    该用户从未签到

    31
    发表于 2004-5-7 19:09:00 | 只看该作者
    晕,好多For ... Next,这样就是不太通用
    ! v4 Y! E4 P* s& H$ k! C# d
    : |% R6 M- Z$ a/ l6 c5 W# t# I要除去重复的,实在困难,我想是不是可以给一个算式一个特征码,以判别是否重复,可以这个特征码不好找啊

    该用户从未签到

    30
    发表于 2004-5-7 13:48:00 | 只看该作者
    没有取出重复的方法真实不好意思
    关闭

    下沙大学生网推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表