论坛: 编程破解 标题: 求算法急在线等 复制本贴地址    
作者: rkh [rkh]    论坛用户   登录
求一个经典算法的应用实列 比如24点 需源代码 环境VC++ 

地主 发表时间: 04-04-07 15:47

回复: sniper167 [sniper167]   论坛用户   登录
看看本版内的这个帖

我发的

"这个数组怎样排?"

B1层 发表时间: 04-04-07 17:50

回复: cyshaoping [cyshaoping]   论坛用户   登录
我在我们学校bbs上看到这个,不知道对你有用没有

作者:johnbill


/*
思路:四张牌算24,有11种算法,它们是:
C#C#C#C (C#C)#C#C C#(C#C)#C
C#C#(C#C) (C#C)#(C#C) (C#C#C)#C
C#(C#C#C) ((C#C)#C)#C (C#(C#C))#C
C#((C#C)#C) C#(C#(C#C))
其中,C表示牌,#表示运算符(加、减、乘、除)
这11种算法有一个共同点,那就是只用四张牌、
三个运算符,而且牌和运算符是相间出现的,于是,
我就可以把这11种算法放在一个数组中,循环调用……

我先把四张牌做全排列,再将所有可能的运算符情况
和四张牌的每一种排列填到这11种算法中进行计算,只要
找到解,就停止循环……

分数的问题不用单独考虑,用double就可以解决问题

从1 1 1 1到10 10 10 10,其中共有566种情况是可以解出的,它们是:

[001] 1 1 1 8 : (1+1+1)*8 [002] 1 1 2 6 : (1+1+2)*6
[003] 1 1 2 7 : (1+2)*(1+7) [004] 1 1 2 8 : 1*(1+2)*8
[005] 1 1 2 9 : (1+2)*(9-1) [006] 1 1 2 10 : (1+1)*(2+10)
[007] 1 1 3 4 : (1+1)*3*4 [008] 1 1 3 5 : (1+3)*(1+5)
[009] 1 1 3 6 : 1*(1+3)*6 [010] 1 1 3 7 : 1*(1+7)*3
[011] 1 1 3 8 : 1-1+3*8 [012] 1 1 3 9 : (1+1)*(3+9)
[013] 1 1 3 10 : 3*(10-(1+1)) [014] 1 1 4 4 : (1+1+4)*4
[015] 1 1 4 5 : 1*(1+5)*4 [016] 1 1 4 6 : 1-1+4*6
[017] 1 1 4 7 : 1*4*(7-1) [018] 1 1 4 8 : (1+1)*(4+8)
[019] 1 1 4 9 : (1-4)*(1-9) [020] 1 1 4 10 : (1+1)*10+4
[021] 1 1 5 5 : (1+5)*(5-1) [022] 1 1 5 6 : 1*(5-1)*6
[023] 1 1 5 7 : (1+1)*(5+7) [024] 1 1 5 8 : (5-(1+1))*8
[025] 1 1 6 6 : (1+1)*(6+6) [026] 1 1 6 8 : 6/(1+1)*8
[027] 1 1 6 9 : (1+1)*9+6 [028] 1 1 7 10 : (1+1)*7+10
[029] 1 1 8 8 : (1+1)*8+8 [030] 1 2 2 4 : (1+2)*2*4
[031] 1 2 2 5 : (1+5)*(2+2) [032] 1 2 2 6 : (1+2)*(2+6)
[033] 1 2 2 7 : (2+2)*(7-1) [034] 1 2 2 8 : (2-1+2)*8
[035] 1 2 2 9 : (1+2+9)*2 [036] 1 2 2 10 : 1*2*(2+10)
[037] 1 2 3 3 : (1+3)*2*3 [038] 1 2 3 4 : (1+2+3)*4
[039] 1 2 3 5 : (1+2)*(3+5) [040] 1 2 3 6 : 1*(2+6)*3
[041] 1 2 3 7 : 1+2+3*7 [042] 1 2 3 8 : (1+3)*(8-2)
[043] 1 2 3 9 : 1*2*(3+9) [044] 1 2 3 10 : 1+2*10+3
[045] 1 2 4 4 : (1+2)*(4+4) [046] 1 2 4 5 : (2-1+5)*4
[047] 1 2 4 6 : (2-1)*4*6 [048] 1 2 4 7 : (1-2+7)*4
[049] 1 2 4 8 : 1*2*(4+8) [050] 1 2 4 9 : (1+9)*2+4
[051] 1 2 4 10 : 1*2*10+4 [052] 1 2 5 5 : 1-2+5*5
[053] 1 2 5 6 : (1-2+5)*6 [054] 1 2 5 7 : 1*2*(5+7)
[055] 1 2 5 8 : (1-5)*(2-8) [056] 1 2 5 9 : (1+2)*5+9
[057] 1 2 5 10 : 2*10-1+5 [058] 1 2 6 6 : (1+2)*6+6
[059] 1 2 6 7 : (1-7)*(2-6) [060] 1 2 6 8 : 1/2*6*8
[061] 1 2 6 9 : 1*2*9+6 [062] 1 2 6 10 : (1+2)*10-6
[063] 1 2 7 7 : (7*7-1)/2 [064] 1 2 7 8 : 1+2*8+7
[065] 1 2 7 9 : 1+2*7+9 [066] 1 2 7 10 : 1*2*7+10
[067] 1 2 8 8 : 1*2*8+8 [068] 1 2 8 9 : 2*8-1+9
[069] 1 2 8 10 : 2*(8-1)+10 [070] 1 3 3 3 : (1+3)*(3+3)
[071] 1 3 3 4 : 1*(3+3)*4 [072] 1 3 3 5 : 1*3*(3+5)
[073] 1 3 3 6 : (1+6)*3+3 [074] 1 3 3 7 : 1*3+3*7
[075] 1 3 3 8 : (1+8)*3-3 [076] 1 3 3 9 : (1+3)*(9-3)
[077] 1 3 3 10 : (1-3+10)*3 [078] 1 3 4 4 : 1*3*(4+4)
[079] 1 3 4 5 : 1+3+4*5 [080] 1 3 4 6 : 6/(1-3/4)
[081] 1 3 4 7 : (1+3)*7-4 [082] 1 3 4 8 : (1+3)*4+8
[083] 1 3 4 9 : 1+3*9-4 [084] 1 3 4 10 : (1+3)*(10-4)
[085] 1 3 5 6 : 1+3*6+5 [086] 1 3 5 7 : (1+5)*(7-3)
[087] 1 3 5 8 : 1+3*5+8 [088] 1 3 5 9 : 1*3*5+9
[089] 1 3 5 10 : 3*5-1+10 [090] 1 3 6 6 : 1*3*6+6
[091] 1 3 6 7 : 1*6*(7-3) [092] 1 3 6 8 : 1*(6-3)*8
[093] 1 3 6 9 : (1+9)*3-6 [094] 1 3 6 10 : 1*3*10-6
[095] 1 3 7 7 : (1-7)*(3-7) [096] 1 3 7 8 : 3/(1-7/8)
[097] 1 3 7 9 : (1+7)/3*9 [098] 1 3 7 10 : 1+3*10-7
[099] 1 3 8 8 : (1+3)*8-8 [100] 1 3 8 9 : 1/3*8*9
[101] 1 3 8 10 : 8/3*(10-1) [102] 1 3 9 9 : (9-1)/3*9
[103] 1 3 9 10 : (1+10)*3-9 [104] 1 3 10 10 : 1+3+10+10
[105] 1 4 4 4 : (1+4)*4+4 [106] 1 4 4 5 : 1*4+4*5
[107] 1 4 4 6 : (1+6)*4-4 [108] 1 4 4 7 : 1+4*4+7
[109] 1 4 4 8 : 1*4*4+8 [110] 1 4 4 9 : (1-4+9)*4
[111] 1 4 4 10 : 1*4*(10-4) [112] 1 4 5 5 : 4-(1-5)*5
[113] 1 4 5 6 : 4/(1-5/6) [114] 1 4 5 7 : 1+4*7-5
[115] 1 4 5 8 : (1+5)*(8-4) [116] 1 4 5 9 : (4-1)*5+9
[117] 1 4 5 10 : (1-5)*(4-10) [118] 1 4 6 6 : (1+4)*6-6
[119] 1 4 6 7 : (1-4+7)*6 [120] 1 4 6 8 : (1-4+6)*8
[121] 1 4 6 9 : 6*(9-(1+4)) [122] 1 4 6 10 : (4-1)*10-6
[123] 1 4 7 7 : (1+7)*(7-4) [124] 1 4 7 8 : (1+7)*4-8
[125] 1 4 7 9 : (1-9)*(4-7) [126] 1 4 8 8 : 1*4*8-8
[127] 1 4 8 9 : 1+4*8-9 [128] 1 4 9 10 : 1+4+9+10
[129] 1 4 10 10 : 1*4+10+10 [130] 1 5 5 5 : (5-1/5)*5
[131] 1 5 5 6 : (1+5)*5-6 [132] 1 5 5 9 : (1+5)*(9-5)
[133] 1 5 5 10 : 5*(10-5)-1 [134] 1 5 6 6 : 1*5*6-6
[135] 1 5 6 7 : 1+5*6-7 [136] 1 5 6 8 : (1-5+8)*6
[137] 1 5 6 9 : 1*6*(9-5) [138] 1 5 6 10 : (1+5)*(10-6)
[139] 1 5 7 8 : (1-5+7)*8 [140] 1 5 7 9 : (1-7)*(5-9)
[141] 1 5 7 10 : (1+7/5)*10 [142] 1 5 8 8 : 1*(8-5)*8
[143] 1 5 8 9 : (1-9)*(5-8) [144] 1 5 8 10 : 1+5+8+10
[145] 1 5 9 9 : 1+5+9+9 [146] 1 5 9 10 : 1*5+9+10
[147] 1 5 10 10 : 5-1+10+10 [148] 1 6 6 6 : (6-1)*6-6
[149] 1 6 6 8 : 6/(1-6/8) [150] 1 6 6 9 : (1-6+9)*6
[151] 1 6 6 10 : 1*6*(10-6) [152] 1 6 7 9 : (1+7)*(9-6)
[153] 1 6 7 10 : 1+6+7+10 [154] 1 6 8 8 : (1-6+8)*8
[155] 1 6 8 9 : 1+6+8+9 [156] 1 6 8 10 : 1*6+8+10
[157] 1 6 9 9 : 1*6+9+9 [158] 1 6 9 10 : (1+10/6)*9
[159] 1 7 7 9 : 1+7+7+9 [160] 1 7 7 10 : 1*7+7+10
[161] 1 7 8 8 : 1+7+8+8 [162] 1 7 8 9 : 1*7+8+9
[163] 1 7 8 10 : 1*8*(10-7) [164] 1 7 9 9 : 7-1+9+9
[165] 1 7 9 10 : (1-9)*(7-10) [166] 1 8 8 8 : 1*8+8+8
[167] 1 8 8 9 : 8-1+8+9 [168] 1 8 8 10 : (1-8+10)*8
[169] 2 2 2 3 : 2*(2+2)*3 [170] 2 2 2 4 : (2+2)*(2+4)
[171] 2 2 2 5 : 2*(2+2*5) [172] 2 2 2 7 : 2*(2*7-2)
[173] 2 2 2 8 : 2*(2+2+8) [174] 2 2 2 9 : 2+2*(2+9)
[175] 2 2 2 10 : 2+2+2*10 [176] 2 2 3 3 : (2+2)*(3+3)
[177] 2 2 3 4 : (2+2+4)*3 [178] 2 2 3 5 : (2*5-2)*3
[179] 2 2 3 6 : 2*(2*3+6) [180] 2 2 3 7 : 2*(2+3+7)
[181] 2 2 3 8 : 2+2*(3+8) [182] 2 2 3 9 : (2+2/3)*9
[183] 2 2 3 10 : 2*(3+10)-2 [184] 2 2 4 4 : 2*(2*4+4)
[185] 2 2 4 5 : 2+2+4*5 [186] 2 2 4 6 : 2*(2+4+6)
[187] 2 2 4 7 : 2+2*(4+7) [188] 2 2 4 8 : (2+2)*4+8
[189] 2 2 4 9 : 2+2*9+4 [190] 2 2 4 10 : (2+2)*(10-4)
[191] 2 2 5 5 : 2*(2+5+5) [192] 2 2 5 6 : 2+2*(5+6)
[193] 2 2 5 7 : 2*5+2*7 [194] 2 2 5 8 : 2*(5+8)-2
[195] 2 2 5 9 : 2*(5-2+9) [196] 2 2 5 10 : 2*(2+5)+10
[197] 2 2 6 6 : 2*6+2*6 [198] 2 2 6 7 : 2*(2+7)+6
[199] 2 2 6 8 : 2*(2+6)+8 [200] 2 2 6 9 : 2*(2*9-6)
[201] 2 2 6 10 : 2+2*6+10 [202] 2 2 7 7 : 2*(7-2+7)
[203] 2 2 7 8 : 2+2*7+8 [204] 2 2 7 10 : 2*(7+10/2)
[205] 2 2 8 8 : (2+2)*8-8 [206] 2 2 8 9 : 2*9-2+8
[207] 2 2 8 10 : 2*(2*10-8) [208] 2 2 9 10 : 2*(9-2)+10
[209] 2 2 10 10 : 2+2+10+10 [210] 2 3 3 3 : 2*(3*3+3)
[211] 2 3 3 5 : 2*(3*5-3) [212] 2 3 3 6 : 2*(3+3+6)
[213] 2 3 3 7 : 2*3*(7-3) [214] 2 3 3 8 : (2*3-3)*8
[215] 2 3 3 9 : (2+3)*3+9 [216] 2 3 3 10 : 3*(3+10/2)
[217] 2 3 4 4 : (2+3)*4+4 [218] 2 3 4 5 : 2*(3+4+5)
[219] 2 3 4 6 : 2+3*6+4 [220] 2 3 4 7 : 2*(3+7)+4
[221] 2 3 4 8 : (2-3+4)*8 [222] 2 3 4 9 : 2/3*4*9
[223] 2 3 4 10 : 2*(3+4)+10 [224] 2 3 5 5 : 2-3+5*5
[225] 2 3 5 6 : 2*3*5-6 [226] 2 3 5 7 : 2+3*5+7
[227] 2 3 5 8 : 2*(3+5)+8 [228] 2 3 5 9 : 2+3*9-5
[229] 2 3 5 10 : 2*(5-3+10) [230] 2 3 6 6 : 2*(3+6)+6
[231] 2 3 6 7 : (2*7-6)*3 [232] 2 3 6 8 : (2+8)*3-6
[233] 2 3 6 9 : 2*6+3+9 [234] 2 3 6 10 : 2*3*(10-6)
[235] 2 3 7 7 : 2*7+3+7 [236] 2 3 7 8 : 2*(7-3+8)
[237] 2 3 7 9 : 2*(3*7-9) [238] 2 3 7 10 : (2+7*10)/3
[239] 2 3 8 8 : (2*8-8)*3 [240] 2 3 8 9 : 8/2*(9-3)
[241] 2 3 8 10 : 2*3+8+10 [242] 2 3 9 9 : 2*3+9+9
[243] 2 3 9 10 : 2+3+9+10 [244] 2 3 10 10 : 2*(10-3)+10
[245] 2 4 4 4 : 2*(4+4+4) [246] 2 4 4 5 : (2+5)*4-4
[247] 2 4 4 6 : 2+4*4+6 [248] 2 4 4 7 : 2*4*(7-4)
[249] 2 4 4 8 : 2*(4+4)+8 [250] 2 4 4 9 : 4*(9-2)-4
[251] 2 4 4 10 : 2*(4+10)-4 [252] 2 4 5 5 : 2*(5+5)+4
[253] 2 4 5 6 : 2*(4+5)+6 [254] 2 4 5 7 : (4-2)*(5+7)
[255] 2 4 5 8 : 2*(4*5-8) [256] 2 4 5 9 : (2+4)*(9-5)
[257] 2 4 5 10 : 2*5+4+10 [258] 2 4 6 6 : (2-4+6)*6
[259] 2 4 6 7 : 2+4*7-6 [260] 2 4 6 8 : 2/4*6*8
[261] 2 4 6 9 : (2+4/6)*9 [262] 2 4 6 10 : 2*4+6+10
[263] 2 4 7 7 : 2*(7+7)-4 [264] 2 4 7 8 : (2*7-8)*4
[265] 2 4 7 9 : 2*4+7+9 [266] 2 4 7 10 : 2*4*(10-7)
[267] 2 4 8 8 : 2*4+8+8 [268] 2 4 8 9 : 8*(9-(2+4))
[269] 2 4 8 10 : 2+4+8+10 [270] 2 4 9 9 : 2+4+9+9
[271] 2 4 9 10 : 2*9-4+10 [272] 2 4 10 10 : (2+4/10)*10
[273] 2 5 5 7 : 2*7+5+5 [274] 2 5 5 8 : (2+5/5)*8
[275] 2 5 5 9 : 2*5+5+9 [276] 2 5 5 10 : (5-2/10)*5
[277] 2 5 6 6 : (2*5-6)*6 [278] 2 5 6 7 : (2-5+7)*6
[279] 2 5 6 8 : 2*5+6+8 [280] 2 5 6 9 : 5/2*6+9
[281] 2 5 6 10 : 2/5*6*10 [282] 2 5 7 7 : 2*5+7+7
[283] 2 5 7 8 : (2*5-7)*8 [284] 2 5 7 9 : 5*7-(2+9)
[285] 2 5 7 10 : 2+5+7+10 [286] 2 5 8 8 : 5*8-2*8
[287] 2 5 8 9 : 2+5+8+9 [288] 2 5 8 10 : (2-10)*(5-8)
[289] 2 5 9 10 : 2*10-5+9 [290] 2 5 10 10 : 2*(10/5+10)
[291] 2 6 6 6 : 2*6+6+6 [292] 2 6 6 7 : (6+6*7)/2
[293] 2 6 6 8 : (2+6/6)*8 [294] 2 6 6 9 : 2*(6+9)-6
[295] 2 6 6 10 : 2+6+6+10 [296] 2 6 7 8 : (2-6+7)*8
[297] 2 6 7 9 : 2+6+7+9 [298] 2 6 7 10 : (2+6)*(10-7)
[299] 2 6 8 8 : 2+6+8+8 [300] 2 6 8 9 : 2/6*8*9
[301] 2 6 8 10 : 2*(6+10)-8 [302] 2 6 9 9 : (2+6/9)*9
[303] 2 6 9 10 : (2-10)*(6-9) [304] 2 6 10 10 : 2*10-6+10
[305] 2 7 7 8 : 2+7+7+8 [306] 2 7 7 10 : (2+10/7)*7
[307] 2 7 8 8 : (2-7+8)*8 [308] 2 7 8 9 : 2*(7+9)-8
[309] 2 7 9 10 : 2*(9-7+10) [310] 2 7 10 10 : 2*(7+10)-10
[311] 2 8 8 8 : 2*(8+8)-8 [312] 2 8 8 9 : (2-8+9)*8
[313] 2 8 8 10 : 8-2+8+10 [314] 2 8 9 9 : (2+9/9)*8
[315] 2 8 9 10 : 2*(8+9)-10 [316] 2 8 10 10 : 2*(10-8+10)
[317] 2 9 10 10 : 9+10/2+10 [318] 3 3 3 3 : 3*3*3-3
[319] 3 3 3 4 : 3+3*(3+4) [320] 3 3 3 5 : 3*3+3*5
[321] 3 3 3 6 : 3*(3+3)+6 [322] 3 3 3 7 : 3*(3/3+7)
[323] 3 3 3 8 : 3*(3-3+8) [324] 3 3 3 9 : 3*(9-3/3)
[325] 3 3 3 10 : 3-3*(3-10) [326] 3 3 4 4 : 3*(3*4-4)
[327] 3 3 4 5 : (3/3+5)*4 [328] 3 3 4 6 : 3-3+4*6
[329] 3 3 4 7 : 3*(4-3+7) [330] 3 3 4 8 : (3+3)*(8-4)
[331] 3 3 4 9 : 3*(3-4+9) [332] 3 3 5 5 : 5*5-3/3
[333] 3 3 5 6 : 3+3*5+6 [334] 3 3 5 7 : 3*(3*5-7)
[335] 3 3 5 9 : (3+3)*(9-5) [336] 3 3 5 10 : 3*3+5+10
[337] 3 3 6 6 : 3*(6/3+6) [338] 3 3 6 7 : 3-(3-6)*7
[339] 3 3 6 8 : (3*3-6)*8 [340] 3 3 6 9 : 3*3+6+9
[341] 3 3 6 10 : 3*(3*6-10) [342] 3 3 7 7 : (3+3/7)*7
[343] 3 3 7 8 : 3*3+7+8 [344] 3 3 7 9 : (3-7)*(3-9)
[345] 3 3 8 8 : 8/(3-8/3) [346] 3 3 8 9 : 3*(3+8)-9
[347] 3 3 8 10 : 3+3+8+10 [348] 3 3 9 9 : 3+3+9+9
[349] 3 3 9 10 : 3+3*10-9 [350] 3 4 4 4 : (3+4)*4-4
[351] 3 4 4 5 : 3+4*4+5 [352] 3 4 4 6 : (3+4/4)*6
[353] 3 4 4 7 : 3*(4/4+7) [354] 3 4 4 8 : 3*4+4+8
[355] 3 4 4 9 : 3*(9-4/4) [356] 3 4 4 10 : 4*(10-3)-4
[357] 3 4 5 5 : 3-4+5*5 [358] 3 4 5 6 : (3-4+5)*6
[359] 3 4 5 7 : 3*4+5+7 [360] 3 4 5 8 : (3+5)*4-8
[361] 3 4 5 9 : 3*(4-5+9) [362] 3 4 5 10 : 3*4/5*10
[363] 3 4 6 6 : 3*4+6+6 [364] 3 4 6 8 : 3*4*(8-6)
[365] 3 4 6 9 : (3-6+9)*4 [366] 3 4 6 10 : 3*(4-6+10)
[367] 3 4 7 7 : 3+4*7-7 [368] 3 4 7 8 : 4*(7-3)+8
[369] 3 4 7 9 : 3*(4+7)-9 [370] 3 4 7 10 : 3+4+7+10
[371] 3 4 8 9 : 3+4+8+9 [372] 3 4 8 10 : 3*4*(10-8)
[373] 3 4 9 9 : 3*(9-4)+9 [374] 3 4 10 10 : 3*10+4-10
[375] 3 5 5 6 : 3*(5+5)-6 [376] 3 5 5 7 : 3*(5/5+7)
[377] 3 5 5 8 : 3*(5-5+8) [378] 3 5 5 9 : (3+9/5)*5
[379] 3 5 6 6 : (3-5+6)*6 [380] 3 5 6 7 : 3*(6-5+7)
[381] 3 5 6 8 : 3*(6-5)*8 [382] 3 5 6 9 : 3*(5-6+9)
[383] 3 5 6 10 : 3+5+6+10 [384] 3 5 7 8 : 3-(5-8)*7
[385] 3 5 7 9 : 3+5+7+9 [386] 3 5 7 10 : 3*(5-7+10)
[387] 3 5 8 8 : 3+5+8+8 [388] 3 5 8 9 : 3*9+5-8
[389] 3 5 9 9 : (3-9)*(5-9) [390] 3 5 9 10 : (3+9)/5*10
[391] 3 5 10 10 : 3*(10-10/5) [392] 3 6 6 6 : (3+6/6)*6
[393] 3 6 6 7 : 3*(6/6+7) [394] 3 6 6 8 : 3*(6-6+8)
[395] 3 6 6 9 : 3+6+6+9 [396] 3 6 6 10 : (6-3)*10-6
[397] 3 6 7 7 : 3*(7-6+7) [398] 3 6 7 8 : 3+6+7+8
[399] 3 6 7 9 : 3*(6-7+9) [400] 3 6 7 10 : 6/3*7+10
[401] 3 6 8 8 : (3+8/8)*6 [402] 3 6 8 9 : (3-8+9)*6
[403] 3 6 8 10 : 3*(6-8+10) [404] 3 6 9 9 : 3*9+6-9
[405] 3 6 9 10 : (3-9)*(6-10) [406] 3 6 10 10 : (3-6/10)*10
[407] 3 7 7 7 : 3+7+7+7 [408] 3 7 7 8 : 3*(7-7+8)
[409] 3 7 7 9 : 3*(9-7/7) [410] 3 7 7 10 : 3*7-7+10
[411] 3 7 8 8 : 3*(7+8/8) [412] 3 7 8 9 : 3*(7-8+9)
[413] 3 7 9 9 : 3*(7+9/9) [414] 3 7 9 10 : 3*(7-9+10)
[415] 3 7 10 10 : 3*(7+10/10) [416] 3 8 8 8 : 3*8-8+8
[417] 3 8 8 9 : 3*8*(9-8) [418] 3 8 8 10 : (8*10-8)/3
[419] 3 8 9 9 : 3*8-9+9 [420] 3 8 9 10 : 3*8*(10-9)
[421] 3 8 10 10 : 3*8-10+10 [422] 3 9 9 9 : 3*(9-9/9)
[423] 3 9 9 10 : 3*(9+9-10) [424] 3 9 10 10 : 3*(9-10/10)
[425] 4 4 4 4 : 4*4+4+4 [426] 4 4 4 5 : 4*(4/4+5)
[427] 4 4 4 6 : 4*(4-4+6) [428] 4 4 4 7 : (4+4)*(7-4)
[429] 4 4 4 8 : 4*(4+4)-8 [430] 4 4 4 9 : 4-4*(4-9)
[431] 4 4 4 10 : 4*(4*4-10) [432] 4 4 5 5 : (4+4/5)*5
[433] 4 4 5 6 : 4*(5-4)*6 [434] 4 4 5 7 : 4*(4-5+7)
[435] 4 4 5 8 : (4+4-5)*8 [436] 4 4 5 10 : 4-4*(5-10)
[437] 4 4 6 8 : 4*(4-6+8) [438] 4 4 6 9 : 4*4/6*9
[439] 4 4 6 10 : 4+4+6+10 [440] 4 4 7 7 : (4-4/7)*7
[441] 4 4 7 8 : 4+4*7-8 [442] 4 4 7 9 : 4+4+7+9
[443] 4 4 7 10 : (4+4)*(10-7) [444] 4 4 8 8 : 4+4+8+8
[445] 4 4 8 9 : 4*9-(4+8) [446] 4 4 8 10 : 4*(4-8+10)
[447] 4 4 10 10 : (10*10-4)/4 [448] 4 5 5 5 : 4*(5/5+5)
[449] 4 5 5 6 : 4*(5-5+6) [450] 4 5 5 7 : 4*(7-5/5)
[451] 4 5 5 8 : (4-5/5)*8 [452] 4 5 5 9 : 4*5-5+9
[453] 4 5 5 10 : 4+5+5+10 [454] 4 5 6 6 : 4*(5+6/6)
[455] 4 5 6 7 : 4*(5-6+7) [456] 4 5 6 8 : (4+5-6)*8
[457] 4 5 6 9 : 4+5+6+9 [458] 4 5 6 10 : 4*5-6+10
[459] 4 5 7 7 : 4*(5+7/7) [460] 4 5 7 8 : 4+5+7+8
[461] 4 5 7 9 : 4*7+5-9 [462] 4 5 7 10 : 4-(5-7)*10
[463] 4 5 8 8 : 4*(5+8/8) [464] 4 5 8 9 : 4*(5-8+9)
[465] 4 5 8 10 : (4+8)/5*10 [466] 4 5 9 9 : 4*(5+9/9)
[467] 4 5 9 10 : 4*(5-9+10) [468] 4 5 10 10 : 4*(5+10/10)
[469] 4 6 6 6 : 4*6-6+6 [470] 4 6 6 7 : 4*6*(7-6)
[471] 4 6 6 8 : 4+6+6+8 [472] 4 6 6 9 : 4*9-(6+6)
[473] 4 6 6 10 : 6/4*(6+10) [474] 4 6 7 7 : 4+6+7+7
[475] 4 6 7 8 : (4+6-7)*8 [476] 4 6 7 9 : 6/4*(7+9)
[477] 4 6 7 10 : 4*7+6-10 [478] 4 6 8 8 : 4*6-8+8
[479] 4 6 8 9 : 4*6*(9-8) [480] 4 6 8 10 : 4-(6-8)*10
[481] 4 6 9 9 : 4*6-9+9 [482] 4 6 9 10 : 4*6*(10-9)
[483] 4 6 10 10 : 4*6-10+10 [484] 4 7 7 7 : 4*(7-7/7)
[485] 4 7 7 8 : 4*(7+7-8) [486] 4 7 8 8 : (4+7-8)*8
[487] 4 7 8 9 : 4*(7+8-9) [488] 4 7 8 10 : 7/4*8+10
[489] 4 7 9 9 : 4*(7-9/9) [490] 4 7 9 10 : 4*(7+9-10)
[491] 4 7 10 10 : 4*(7-10/10) [492] 4 8 8 8 : (4-8/8)*8
[493] 4 8 8 9 : (4+8-9)*8 [494] 4 8 8 10 : 4*(8+8-10)
[495] 4 8 9 9 : (4-9/9)*8 [496] 4 8 9 10 : (4+9-10)*8
[497] 4 8 10 10 : 4-(8-10)*10 [498] 4 9 9 10 : 9-4+9+10
[499] 5 5 5 5 : 5*5-5/5 [500] 5 5 5 6 : 5*5+5-6
[501] 5 5 5 9 : 5+5+5+9 [502] 5 5 6 6 : (5+5-6)*6
[503] 5 5 6 7 : 5*5+6-7 [504] 5 5 6 8 : 5+5+6+8
[505] 5 5 7 7 : 5+5+7+7 [506] 5 5 7 8 : 5*5+7-8
[507] 5 5 7 10 : (5+7)/5*10 [508] 5 5 8 8 : 5*5-8/8
[509] 5 5 8 9 : 5*5+8-9 [510] 5 5 8 10 : (5+10)/5*8
[511] 5 5 9 9 : 5*5-9/9 [512] 5 5 9 10 : 5*5+9-10
[513] 5 5 10 10 : 5*5-10/10 [514] 5 6 6 6 : (5-6/6)*6
[515] 5 6 6 7 : 5+6+6+7 [516] 5 6 6 8 : 6-(5-8)*6
[517] 5 6 6 9 : 6*9-5*6 [518] 5 6 6 10 : (6+6)/5*10
[519] 5 6 7 7 : (5-7/7)*6 [520] 5 6 7 8 : (5+7)*(8-6)
[521] 5 6 7 9 : 6-(5-7)*9 [522] 5 6 8 8 : (5+6-8)*8
[523] 5 6 8 9 : (5+8-9)*6 [524] 5 6 8 10 : 5*6*8/10
[525] 5 6 9 9 : 5*(9-6)+9 [526] 5 6 9 10 : (5+9-10)*6
[527] 5 6 10 10 : (5-10/10)*6 [528] 5 7 7 9 : (5+7)*(9-7)
[529] 5 7 7 10 : (7-5)*7+10 [530] 5 7 8 8 : (7-5)*8+8
[531] 5 7 8 9 : (5+7-9)*8 [532] 5 7 8 10 : (5+7)*(10-8)
[533] 5 7 9 10 : 5*(10-7)+9 [534] 5 7 10 10 : 7/5*10+10
[535] 5 8 8 8 : 5*8-(8+8) [536] 5 8 8 9 : 8/(8-5)*9
[537] 5 8 8 10 : (5+8-10)*8 [538] 5 9 10 10 : 9-5+10+10
[539] 6 6 6 6 : 6+6+6+6 [540] 6 6 6 8 : 6*(6+6-8)
[541] 6 6 6 9 : 6-6*(6-9) [542] 6 6 6 10 : 6*10-6*6
[543] 6 6 7 9 : 6*(6+7-9) [544] 6 6 7 10 : 6-6*(7-10)
[545] 6 6 8 8 : 6/(8-6)*8 [546] 6 6 8 9 : 6-(6-8)*9
[547] 6 6 8 10 : 6*(6+8-10) [548] 6 6 9 10 : (6+10)/6*9
[549] 6 7 7 10 : 6*(7+7-10) [550] 6 7 8 9 : 6*8/(9-7)
[551] 6 7 8 10 : 6*7-(8+10) [552] 6 7 9 9 : 6*7-(9+9)
[553] 6 7 10 10 : (10-7)*10-6 [554] 6 8 8 8 : (8-6)*8+8
[555] 6 8 8 9 : (8+8)/6*9 [556] 6 8 8 10 : 6*8/(10-8)
[557] 6 8 9 9 : 8/6*(9+9) [558] 6 8 9 10 : 6-(8-10)*9
[559] 6 9 9 10 : 9/6*10+9 [560] 6 10 10 10 : 10-6+10+10
[561] 7 7 9 10 : 7*(9-7)+10 [562] 7 8 8 9 : 8-(7-9)*8
[563] 7 8 8 10 : 8*10-7*8 [564] 7 8 9 10 : 8*9/(10-7)
[565] 7 8 10 10 : 7*(10-8)+10 [566] 8 8 8 10 : 8-8*(8-10)

*/

#include<stdio.h>
#include<float.h>
#include<math.h>
#include<string.h>
#include<ctype.h>

int bFound; // 标志是否找到一个解,只要找到一个解,此变量为true

#define AUTO // 如果把这句注释掉,就是手动输入四张牌

//////////////////////////////////////////////////////////////////
//
// 以下这一段是用于表达式解析的,基于递归下降的写法
// 由于算24所用表达式十分简单,而且不需要判断格式错误,
// 于是相应的程序也比较简单
//
// E -> I{+I} | I{-I}
// I -> F{*F} | F{/F}
// F -> N | (E)
// N -> 数字
//
int iCur;
const char *str;
struct node
{
node *left;
node *right;
double dValue;
char chOp;
node(node *left, char chOp, node *right)
{
this->left = left;
this->chOp = chOp;
this->right = right;
dValue = 0;
}
node(double dValue)
{
this->left = NULL;
this->chOp = ' ';
this->right = NULL;
this->dValue = dValue;
}
~node()
{
if (left != NULL)
delete left;
if (right != NULL)
delete right;
}
};

node *E();
node *F();
node *I();

node * F()
{
node * pNode;
char chOp = str[iCur++];
if (chOp == '(')
{
pNode = E();
iCur++;
}
else
{
char strNum[10];
int iPos = 0;
double dNum;
while (isdigit(chOp))
{
strNum[iPos++] = chOp;
chOp = str[iCur++];
}
strNum[iPos] = 0;
iCur--;
sscanf(strNum, "%lf", &dNum);
pNode = new node(dNum);
}
return pNode;
}

node * I()
{
node *left, *right;
bool bFirst = true;
char chOp;
do
{
if (bFirst)
{
left = F();
bFirst = false;
}
else
{
right = F();
left = new node(left, chOp, right);
}
chOp = str[iCur++];
}
while (chOp == '*' || chOp == '/');
iCur--;
return left;
}

node * E()
{
node *left, *right;
bool bFirst = true;
char chOp;
do
{
if (bFirst)
{
left = I();
bFirst = false;
}
else
{
right = I();
left = new node(left, chOp, right);
}
chOp = str[iCur++];
}
while (chOp == '+' || chOp == '-');
iCur--;
return left;
}

double Compute(node *exp)
{
if (exp->chOp == ' ')
return exp->dValue;
switch (exp->chOp)
{
case '+':
return Compute(exp->left) + Compute(exp->right);
case '-':
return Compute(exp->left) - Compute(exp->right);
case '*':
return Compute(exp->left) * Compute(exp->right);
}
double dValue = Compute(exp->right);

// 遇到除数为0的情况,我就丢出一个整型数,不再继续计算
if (fabs(dValue) < 1e-6)
throw 0;
return Compute(exp->left) / dValue;
}

double solveExp(const char *strExp)
{
iCur = 0;
str = strExp;
node *pResult = E();
double dRet;

try
{
dRet = Compute(pResult);
}
catch (int)
{
dRet = 0;
}
delete pResult;
return dRet;
}

//
// 以上这一段是用于表达式解析的,基于递归下降的写法
//
// E -> I{+I} | I{-I}
// I -> F{*F} | F{/F}
// F -> N | (E)
// N -> 数字
//
//////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////
// //
// 下面才是重点 //
// //
//////////////////////////////////////////////////////////////////
void main()
{
int aiCardArrange[24][4]= // 四张牌的排列
{
{0,1,2,3}, {0,1,3,2}, {0,2,1,3}, {0,2,3,1}, {0,3,1,2}, {0,3,2,1},
{1,0,2,3}, {1,0,3,2}, {1,2,0,3}, {1,2,3,0}, {1,3,0,2}, {1,3,2,0},
{2,0,1,3}, {2,0,3,1}, {2,1,0,3}, {2,1,3,0}, {2,3,0,1}, {2,3,1,0},
{3,0,1,2}, {3,0,2,1}, {3,1,0,2}, {3,1,2,0}, {3,2,0,1}, {3,2,1,0}
};
int aiOpArrange[3]; // 四张牌中三个表达式空位的状态
char strExpFormat[11][20]= // 四张牌组成的表达式的11种状态,
{ // 这里我直接用了printf中的format string的形式

"%d%c%d%c%d%c%d",
"(%d%c%d)%c%d%c%d",
"%d%c(%d%c%d)%c%d",
"%d%c%d%c(%d%c%d)",
"(%d%c%d)%c(%d%c%d)",
"(%d%c%d%c%d)%c%d",
"%d%c(%d%c%d%c%d)",
"((%d%c%d)%c%d)%c%d",
"(%d%c(%d%c%d))%c%d",
"%d%c((%d%c%d)%c%d)",
"%d%c(%d%c(%d%c%d))"
};
char strOp[5]={'+','-','*','/'}; // 四种运算符
char strExp[20]; // 由四张牌生成的表达式
int aiCard[4],aiInput[4]; // aiCard是参与运算的四张牌(已被排列),
// aiInput是输入的四张牌
int i,j,k,l,iTemp,iIndex; // 一些小变量
double dResult; // 表达式的运算结果
iIndex=1;
#ifdef AUTO
// 为了减少程序的行长,这四个循环我没有逐级缩进
for (aiInput[0] = 1; aiInput[0] <= 10; aiInput[0]++)
for (aiInput[1] = aiInput[0]; aiInput[1] <= 10; aiInput[1]++)
for (aiInput[2] = aiInput[1]; aiInput[2] <= 10; aiInput[2]++)
for (aiInput[3] = aiInput[2]; aiInput[3] <= 10; aiInput[3]++)
#else
scanf("%d%d%d%d",
&aiInput[0], &aiInput[1],
&aiInput[2],&aiInput[3]);
#endif
{
bFound = 0;
for(i = 0; i < 24; i++)
{
for (j = 0; j < 4; j++)
aiCard[j] = aiInput[aiCardArrange[i][j]];
for (k = 0; k < 64; k++)
{
iTemp = k;
aiOpArrange[0] = iTemp % 4;
iTemp /= 4;
aiOpArrange[1] = iTemp % 4;
iTemp /= 4;
aiOpArrange[2] = iTemp % 4;
for (l = 0; l < 11; l++)
{
sprintf(strExp, strExpFormat[l],
aiCard[0], strOp[aiOpArrange[0]],
aiCard[1], strOp[aiOpArrange[1]],
aiCard[2], strOp[aiOpArrange[2]],
aiCard[3]);
strcat(strExp, "`"); // 添加终结符以便解析
dResult = solveExp(strExp);
strExp[strlen(strExp) - 1] = 0; // 去掉刚添加的终结符
if (fabs(dResult - 24) < 1e-6)
{
bFound = 1;
printf("[%03d] %2d %2d %2d %2d : %14s",
iIndex,
aiInput[0], aiInput[1], aiInput[2], aiInput[3],
strExp);

if (iIndex % 2 == 0)
printf("\n");
else
printf(" ");
iIndex++;
break;
}
}
if (bFound)
break;
}
if (bFound)
break;
}
}
#ifndef AUTO
if (!bFound)
puts("No solution.");
#endif
}


B2层 发表时间: 04-04-10 19:13

回复: kert_t8 [kert_t8]   论坛用户   登录
楼上的牛,不过11种算法最后可以精简成5种,不过是多少我忘了
我们以前做过这个,请别人给我们讲过这个算法

B3层 发表时间: 04-04-12 10:00

回复: cyshaoping [cyshaoping]   论坛用户   登录
我只是转载的,哪有牛啊?
哈哈!

B4层 发表时间: 04-04-14 12:25

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号