下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]
oldice 该用户已被删除
跳转到指定楼层
1
发表于 2004-4-21 14:13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谁能帮帮忙编出这个问题啊?1 J. U# n6 c+ E' c
   儿童节时.两个人比赛踩汽球.汽球一百个.分别编号1~100.在相同的时间内.两个人一起去踩这100个汽球.他们的基数都为1.在踩了一个汽球后.乘上汽球的编号.再踩再乘.时间到后.两个把自己的乘到的结果报出来.分数高的人为胜.如果一方说慌.那就另一方胜了.7 e2 W  Q0 |0 r* ]; ?
   但考虑到是否有人慌报数字的问题.先定义分数低的那个人是真的.因为他没必要说慌.: Z7 Z* G6 E7 Z' U+ A
    因为两个人不可能踩同一个数字.所以可以根据把结果分解后的数字想比较.可以判断他们的结果有没有说慌.% i; O2 d( e& a$ K1 P$ i
    比如.A的结果是147;B的结果是49.那么.A只能是49*3,而B也只能是1*49.因为B没有说慌.所以.A说慌了.那就是B胜了.: F& D# i! C; @! C" v' F
    又如:A的结果是486.B的结果是81.那样的话.A除了分解为81*6外.还可以分解为9*54或者3*9*18等.而B.可以由1*81得到.也可以由3*27.A和B至少存在一组不重叠的编号.所以.分数高的A就胜了.' U5 }4 p, l- Q# s- y
   具体输入输入如:4 J; o5 i6 c8 R% h' u" h5 U
Input
& [1 L. Q' m, L$ O6 y/ z7 h343     49
7 U% i" s4 q8 U- r8 D3599   610
( n( l! L, O" J# L, K62       36
7 K) V; H: |, z, ?' z
2 N1 x" i5 r* y% X. L; nOutput" Q0 |+ }( c' Q; t9 h" E, ?9 o" Q
49
6 i) s/ W9 j9 l" e! T1 @. [" m610, g1 Y+ ~' Q! ~' O7 t5 ^8 g
62
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

该用户从未签到

2
发表于 2004-5-10 14:32:00 | 只看该作者
这个代码就你局的例子都没有问题 7 X. ~3 {$ }- \" o保存为.vbs文件 * O7 ]! q, a: r2 p; o6 x5 i+ f* x. i3 ~+ w2 s Function scanfnum(hfile) $ U7 O5 \8 R) i# @9 H8 ?+ T '从文件中读取一个数字 V7 \4 u$ x5 J/ w Dim s, n, n_end 8 e/ s6 k% h. {2 B8 z* I- _' g n = "" ! D. n0 {3 ^" ?- W1 E s = "" ; k) C5 W' y( m8 R6 m6 [3 V. k* M9 p n_end = False - E# V L- }6 ]. a# w d_end = False : i3 ^9 G. Q* g3 a- ~0 j( h" x% O: s Do While Not (hfile.AtEndOfStream) 1 E* U! Y* @9 f6 y" @. k* U6 X s = hfile.read(1) / V, k3 o! X0 l" C+ Y Do While (s < "0" Or s > "9") And (Not (hfile.AtEndOfStream)) 1 e9 m3 b! ?2 E: ~% ? P. v& \( Q If n_end = True Then , U: R- X. E N+ B/ D! n d_end = True % K" C( B0 U4 b: r/ k) D5 ~) j Exit Do. G( W, G! C' ]0 U& M) p7 m. o9 e End If 2 x) a4 z" `4 n4 Q& b4 b s = hfile.read(1)6 M: j" s1 T5 Y4 k! } Loop 0 Y4 E7 z3 N- K+ ~) ?+ o If d_end Then Exit Do # D Y7 v% A# }! x$ ] If s >= "0" And s <= "9" Then+ q- t( d/ I$ m+ q1 c n = n + s3 Z6 x1 v# E) u. ?: r- z, m! x n_end = True 8 ~% L- _! ?4 w( y7 P" C End If# r* E, @7 A" U3 ~ Loop5 j7 P' o. t8 \& m# G If n = "" Then scanfnum = "error" Else scanfnum = CInt(n) : y. _6 [8 h& O, v' s 2 L; J6 @: g' REnd Function * y! X W& A# A: |- D: C7 C1 |$ e! ~$ R% N Function truenum(n1, n2, vx)5 {; R# M, P/ @2 ~0 l ' ↑存储分数的书组 7 C9 ?# o3 O, P. c5 D& e '默认n1>n2 + ?' k& k4 i8 v' V3 R1 [0 x; n Dim p, v1, v2 ) [6 p! U! I4 k: C v1 = n1# O) |! ?3 v' D v2 = n2 ! b1 f: a1 N; T# ~ '下面把v1拆份成为每个数字尽可能大,数量尽可能少的组合 # b- {4 s+ y: ~# ?* X9 i4 _, `1 i p = 100* G9 f8 N7 x! |8 E" ^% r Do While v1 > 1 And p > 1! z6 a1 B+ i! r, w! Z5 i4 z) x If v1 Mod vx(p) = 0 Then * n% O8 E- B5 ~0 b v1 = v1 \ vx(p)" H. T1 \7 P5 D( R2 I8 r vx(p) = 0 '用过的数字设置0* \5 P8 B; u4 N& C End If * A) Z$ s4 D8 g( e/ S p = p - 1 4 b# I* M/ b1 @4 a8 {9 o1 v Loop1 U% |- q4 `: H- u, D '下面一样尝试把v2拆份成为每个数字尽可能大,数量尽可能少的组合,但是v1用过的数字不能再用 ( y. D/ `. {- l. W2 c. Z- Q p = 1002 Q7 I" g5 G$ j/ ~2 b* G Do While v2 > 1 And p > 1 9 X4 \" D. W* b+ G, C7 R If vx(p) <> 0 Then 0 S+ h9 e- s& [( g$ S If v2 Mod vx(p) = 0 Then 1 j9 `8 \* R4 l& p: U9 v8 Q v2 = v2 \ vx(p)9 C8 r! H& X! J+ T) K vx(p) = 0' E# |3 M- c4 R End If- b0 P) m/ H2 Q& ]7 x8 g End If # ~1 P5 s G9 C7 G3 d5 A p = p - 18 W- o; n: t% b# N1 T8 y Loop- h) {$ t- r: X z8 ? '查分成功则结果v2应该是1,如果v1占用了v2必需的数字就会拆份失败( H% C3 `( @" b1 V U* N If v2 = 1 Then truenum = 0 Else truenum = 1. r; r* L7 u8 D" B. P b End Function " }1 h+ W) g# c+ H! J: C0 H . e/ Q1 I( }# ?/ YFunction startprc(n, inpath, outpath)/ O( \0 V' V7 W# Q7 l, r/ }; d ' ↑气球个数+ n8 F8 i3 F% \7 Y$ w) x1 J6 e ' ↑输入文件路径 / q* h( K7 e9 f; O0 b+ [4 k L* w ' ↑输出文件路径 ; e# h: ?5 ^4 o+ I3 h Dim nx(2), singlenum(), cnt 7 r% P' \: T* U ReDim singlenum(n)# i4 j: J' H9 j1 M" D# g- a / I, x# f8 c' B0 n: @& v Set fso = CreateObject("scripting.filesystemobject")8 j, q3 A- I, n$ d0 j% c/ z If fso.fileexists(inpath) Then y% k* K p! z8 H* C Set inf = fso.opentextfile(inpath), M7 B* W- |* Q$ k+ K* H1 k3 ^ Set outf = fso.createtextfile(outpath, 1)- L/ H8 B" z, H9 ^& g3 S" a- h" U" T Do While Not (inf.AtEndOfStream)" I- P: s; @; T) `' F* a For i = 1 To n ( _7 s4 ?3 {$ a \7 ], L& e singlenum(i) = i '写入每个球的分数* c9 Q& Z9 ~! ~ Next ; ]4 Q& P+ G: |6 L- [ '读取两个数 T" C' U$ `0 w4 L nx(0) = scanfnum(inf)8 B1 J1 X6 l' N) @+ E1 b u nx(1) = scanfnum(inf)& M" B9 m; y p9 r9 ?; s If nx(0) <> "error" And nx(1) <> "error" Then # y# D5 A2 c1 ?4 j( F6 l If nx(0) < nx(1) Then 0 I( A% J3 G/ e, Y( \2 l2 a+ P '大叔在前 " Z( \5 u E* Y# c7 `1 k4 Z nx(2) = nx(0) & k2 C6 k: ~, Z2 e2 [ ` nx(0) = nx(1) 1 L3 U5 S" G# H2 i% N nx(1) = nx(2) ' s X7 I( C* V) e1 p End If ; p$ D! @" C8 Z; Q! \ opp = truenum(nx(0), nx(1), singlenum)0 ^+ C2 j! V% V! s/ e! |6 H2 r' Y outf.writeline nx(opp) 2 e# D! y1 M" I' K End If+ d3 a. l" w4 j' P! @$ n Loop, x1 c9 T' j* a, b( e0 o/ C End If 3 q e! z m; x5 Y( uEnd Function/ c: [: O6 r# N. {% @$ d* m0 H2 C '***************************4 {$ B9 n* a) c4 n- o2 H '这里开始运行 3 @$ X) ~; W7 M* Z9 D. Q'*************************** d% g, Z6 q2 F8 P2 Y6 H startprc 100, "input.txt", "output.txt" 1 I/ `2 C. v: T J / z7 [6 ^- _7 p/ l9 [0 } + p# t" H! I% q2 c; _& k+ q$ c5 {! I) H) L8 B! ^6 W 8 \) R. q+ J/ ^7 C
[此贴子已经被作者于2004-5-10 14:36:26编辑过]
* c: R/ Y T6 L- f

本版积分规则

关闭

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

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