下沙论坛

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

用新浪微博连接

一步搞定

QQ登录

QQ登录

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

有趣的踩汽球问题.看看吧

[复制链接]
oldice 该用户已被删除
跳转到指定楼层
1
发表于 2004-4-21 14:13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谁能帮帮忙编出这个问题啊?
; e( e3 E6 N9 f' a& }6 V$ E. d4 A   儿童节时.两个人比赛踩汽球.汽球一百个.分别编号1~100.在相同的时间内.两个人一起去踩这100个汽球.他们的基数都为1.在踩了一个汽球后.乘上汽球的编号.再踩再乘.时间到后.两个把自己的乘到的结果报出来.分数高的人为胜.如果一方说慌.那就另一方胜了.' Z6 O4 S3 c# |- |' a3 p
   但考虑到是否有人慌报数字的问题.先定义分数低的那个人是真的.因为他没必要说慌.
' X+ G  y0 Q  R    因为两个人不可能踩同一个数字.所以可以根据把结果分解后的数字想比较.可以判断他们的结果有没有说慌.
2 L: \# A  c: }! Y' r    比如.A的结果是147;B的结果是49.那么.A只能是49*3,而B也只能是1*49.因为B没有说慌.所以.A说慌了.那就是B胜了.
" T. d- j9 f2 {" z" R3 C! o6 j5 F    又如:A的结果是486.B的结果是81.那样的话.A除了分解为81*6外.还可以分解为9*54或者3*9*18等.而B.可以由1*81得到.也可以由3*27.A和B至少存在一组不重叠的编号.所以.分数高的A就胜了./ P7 o* p8 b: `; H. \
   具体输入输入如:
) V: c' q  t1 ^- _3 Z3 k% e, ?' Q/ H( SInput7 w. L6 A8 R0 L
343     49
: ~9 |  W3 }: ~3599   610
2 c$ C( M9 f. C1 c% E* b" J62       363 k0 R  _5 d8 [% a7 k$ Z

8 M) Y# C$ m, v3 X1 DOutput! a4 ^* u5 K7 q2 B- U' t( W
49
- H1 d0 c& Q" `+ d2 y' ?+ u+ [610
! m2 ?: @$ r+ B  b+ o6 B62
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩 转发到微博

该用户从未签到

2
发表于 2004-5-10 14:32:00 | 只看该作者
这个代码就你局的例子都没有问题 6 H2 A( p, S4 \- _5 W保存为.vbs文件/ V* v/ n0 Z% _: d; G' | / M+ Y% B' i) d1 q0 M- [5 {2 V- x Function scanfnum(hfile)# e g7 j: I1 R5 A. w8 A '从文件中读取一个数字 9 s9 [0 G' Z) N Dim s, n, n_end; v1 ?' i: x* B2 V p n = ""( S: O+ K2 a/ L, m, Y s = ""% p3 i1 p4 c3 [, J/ r, a6 X$ ^ n_end = False( `0 g3 d% C4 k% X. y/ z9 h d_end = False , D% A/ P6 m* b9 p! i Do While Not (hfile.AtEndOfStream)6 E1 v' A/ D/ E0 \- y% z6 u s = hfile.read(1) 5 D3 M( @# s1 i' g/ ? Do While (s < "0" Or s > "9") And (Not (hfile.AtEndOfStream)) 7 D0 d6 F$ A/ |+ G+ ]; h If n_end = True Then' x: P) g! x4 h, ?$ ^& @) R( ? h d_end = True/ @6 x# |# n3 X( m Exit Do 1 P. }; h) c- ?1 b2 s0 _& `# e9 o End If& e5 w' W8 _8 Q: a4 P5 w& y s = hfile.read(1) . P: s( P: \. o6 O- t Loop % E+ ?/ c P% @' k4 P- K If d_end Then Exit Do $ `+ i; W5 c; m% w: o4 B3 t% R If s >= "0" And s <= "9" Then3 T& X6 J7 _% R- }+ G n = n + s8 d/ R, S# K& e. E' u9 u n_end = True . M" {4 d1 z R6 I1 X End If # R8 j o$ U7 g& T Loop % c- g! [9 K" L0 k If n = "" Then scanfnum = "error" Else scanfnum = CInt(n) # `3 E3 I4 r1 \# o) Y( e. D1 V1 \$ M. \7 z: x% Q End Function& o$ Y! y8 H0 l7 U9 w- g) U9 x3 _ & P4 F& _3 _+ M) }! ? Function truenum(n1, n2, vx)0 F% E; Q3 D- A; y# Y$ E: T& A, R ' ↑存储分数的书组, m- U3 [7 K" I* ?9 Z R '默认n1>n2 5 l: ^% j8 I) M- K Dim p, v1, v2 ( \& `% p/ b# t% b: X/ v d f- w, n v1 = n1 / X6 V5 O6 u) a: n v2 = n2; G9 K6 j# f* H z& _7 r/ i7 D '下面把v1拆份成为每个数字尽可能大,数量尽可能少的组合 # w4 ^* W& z. V7 h p = 1009 X, H6 J" z6 i! s$ C Do While v1 > 1 And p > 19 y% i4 @4 g" Z w If v1 Mod vx(p) = 0 Then7 p Z6 o6 ^# z, L v1 = v1 \ vx(p)4 d( R9 P( {1 C$ Y$ @& ^+ P8 M vx(p) = 0 '用过的数字设置09 g% _9 f6 t' @. s End If$ J% T: _' l' @: w; T p = p - 1 ( G! c0 d: z3 n2 p' I' Z Loop # D+ @1 \# T G" E* B: `7 B) J '下面一样尝试把v2拆份成为每个数字尽可能大,数量尽可能少的组合,但是v1用过的数字不能再用% F( R& ^" ]/ z2 t5 e: z; f p = 1009 B4 ]+ O- t+ [9 ]/ Y# [( f _9 i; V Do While v2 > 1 And p > 1 7 b# |* ?1 K3 ^3 S; M8 ` If vx(p) <> 0 Then- y; M) p- H1 t L% }# o* o$ ^ If v2 Mod vx(p) = 0 Then& f/ W ?9 U% P. J1 |$ R v2 = v2 \ vx(p)* |* s* B$ t2 b- \$ t' W7 b vx(p) = 06 x! V: V' a5 ? End If' |& v! Z# x4 v* F& C1 |! t6 x4 M9 X End If1 f" @) J4 A {: |7 N p = p - 1 * i' D9 A+ w2 k! l Loop! m# X' }* [# F9 w% W1 X: n; p '查分成功则结果v2应该是1,如果v1占用了v2必需的数字就会拆份失败# {1 i W6 T' c5 E If v2 = 1 Then truenum = 0 Else truenum = 1 4 b0 e6 D4 m" ^1 R$ rEnd Function ! p0 g, ^8 i2 `8 h/ V) ~3 S4 V Function startprc(n, inpath, outpath)" z9 M# n/ ~- B ' ↑气球个数 # O, T8 K& C: l/ w1 `1 n ' ↑输入文件路径 0 V# p+ `7 D+ Z ' ↑输出文件路径 # I/ f7 y: N0 s% L6 h6 J( M9 o Dim nx(2), singlenum(), cnt. ~7 ^" e0 x" o) P ReDim singlenum(n)0 f2 }% w F3 [* T1 I7 D 2 ^) k% K" h6 |; l' J' j. U Set fso = CreateObject("scripting.filesystemobject") ' y; z' s" p. r If fso.fileexists(inpath) Then 7 c2 y( N+ y* z+ j Set inf = fso.opentextfile(inpath) * W. [; l+ e9 V7 N E Set outf = fso.createtextfile(outpath, 1) , \6 j4 q' n: O- y Do While Not (inf.AtEndOfStream) m) L1 l1 c7 u4 s For i = 1 To n - o9 g+ J6 i X, B singlenum(i) = i '写入每个球的分数8 E) c: X8 i, \* b8 j; @7 I2 z9 J L( o Next/ a9 V9 Z& r5 c% ] b0 v- p9 _ '读取两个数 4 e: I% { _5 u nx(0) = scanfnum(inf) ! k" U: i( P k9 v$ S' n nx(1) = scanfnum(inf)) b' C; ]7 m9 s4 ^ If nx(0) <> "error" And nx(1) <> "error" Then4 k" S: }3 b0 ^0 u$ }7 I( T7 q s If nx(0) < nx(1) Then' v t( R8 K& Y8 y. ` '大叔在前 5 w0 p5 e! y' I# I3 t nx(2) = nx(0)! }6 C1 V' J9 e- ^! } nx(0) = nx(1) " N9 W9 C8 M' o# U3 N nx(1) = nx(2) " U2 x3 f) I) q- x, `, g) C End If 1 ?! i' W" N m3 B1 } opp = truenum(nx(0), nx(1), singlenum)1 G+ ?/ u& h: U( V8 K. b. F outf.writeline nx(opp) & S# M; h& p0 Y% t8 M( P1 k7 L End If/ p4 e6 a4 x F# b Loop 3 c' q( q a& d! q( y4 I End If8 ]9 c7 C* [1 r1 h7 h# U End Function: _/ U: }6 ]- ~# `% g6 F '***************************7 D2 }# ]. T* H) _4 w '这里开始运行3 A; Q4 ^; j; C; ^3 K9 A '***************************) e( R9 A1 M9 Y/ [# i startprc 100, "input.txt", "output.txt" " v4 H3 A/ D& ` / M1 j, ]% Q. a) J% |8 r/ p! S ! m6 I/ P- K/ T! c. P + @; Y( h5 u5 X1 u& @ , y2 [* L c8 s: ?6 z6 J
[此贴子已经被作者于2004-5-10 14:36:26编辑过]
0 J2 C# E7 F$ v) a4 e1 S

本版积分规则

关闭

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

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