下沙论坛

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

QQ登录

QQ登录

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

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

[复制链接]
oldice 该用户已被删除
跳转到指定楼层
1
发表于 2004-4-21 14:13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谁能帮帮忙编出这个问题啊?. ^6 s! R) N: h
   儿童节时.两个人比赛踩汽球.汽球一百个.分别编号1~100.在相同的时间内.两个人一起去踩这100个汽球.他们的基数都为1.在踩了一个汽球后.乘上汽球的编号.再踩再乘.时间到后.两个把自己的乘到的结果报出来.分数高的人为胜.如果一方说慌.那就另一方胜了.8 F& J$ _3 t* r$ y
   但考虑到是否有人慌报数字的问题.先定义分数低的那个人是真的.因为他没必要说慌.) c! v: V/ V! f# @! J7 g
    因为两个人不可能踩同一个数字.所以可以根据把结果分解后的数字想比较.可以判断他们的结果有没有说慌.
. b! E. M+ t6 O- g4 I& _9 o7 X8 s1 M    比如.A的结果是147;B的结果是49.那么.A只能是49*3,而B也只能是1*49.因为B没有说慌.所以.A说慌了.那就是B胜了.& p3 {0 Y$ E- K9 D
    又如:A的结果是486.B的结果是81.那样的话.A除了分解为81*6外.还可以分解为9*54或者3*9*18等.而B.可以由1*81得到.也可以由3*27.A和B至少存在一组不重叠的编号.所以.分数高的A就胜了.
+ D( c: S( Q9 [* W/ h; T4 R   具体输入输入如:
  B3 n3 W- f& i" a4 D0 pInput2 K7 ?* l: x4 i: B/ H
343     49
  }) [' `9 m/ d5 s3599   610
  S" z6 p1 p8 M62       36
  O2 u& Q2 W/ l, ~. w# O6 j8 R( |- n. R3 i% v2 T" ]) o- y
Output" I' w, N4 C/ M4 _( D2 l) D; d: R+ Z
494 }' @9 p. y6 b- B, q1 q! m5 B
610
4 F( Z" i! _' _3 ^62
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩

该用户从未签到

2
发表于 2004-5-10 14:32:00 | 只看该作者
这个代码就你局的例子都没有问题 ' v. t. y# _2 ~保存为.vbs文件 ; x( D8 @# {$ {: \ 2 _: g5 A7 A8 o' n; VFunction scanfnum(hfile) , a K( `& J8 } '从文件中读取一个数字 2 o1 [& a! G5 H5 d, Y0 G" [* s Dim s, n, n_end- D4 ^) ^: k$ a+ \6 ~) R' j8 c3 n" w n = ""- o* u0 f0 F1 h+ ?$ O( r' d: o C! X s = "" # U1 W% e7 T6 g/ g n_end = False 1 O+ y2 |0 Z, b& w d_end = False4 d' x+ n7 p& ?! Y0 v7 ? Do While Not (hfile.AtEndOfStream) . k; y1 U% g9 L0 P s = hfile.read(1) o+ u1 F3 H" r$ N; V Do While (s < "0" Or s > "9") And (Not (hfile.AtEndOfStream)) 8 J1 i6 P" s& R d* r/ ` If n_end = True Then 4 \- ^5 v# c0 {) L& d+ Z d_end = True; e1 h6 V i& A, {3 Y9 O( |) A6 e Exit Do * ~7 ^1 ^8 }' N6 I7 ~5 m End If " g0 ?; P# f) }5 `7 q s = hfile.read(1) 2 h, H" t/ n+ J9 k2 x) T, } Loop' q. t; ?; e, W4 L If d_end Then Exit Do3 W8 y7 i+ t2 L3 L6 I If s >= "0" And s <= "9" Then ; R3 U \0 P: t, i n = n + s 3 v2 t- x6 G5 S7 ]& J n_end = True, G0 J4 i% C+ l4 y End If, W5 `$ h% ^# E Loop. C: l8 e4 `! h# F' A If n = "" Then scanfnum = "error" Else scanfnum = CInt(n); j1 u, D/ y$ k) e' G4 x4 i- t 0 T7 l3 d4 `1 l3 R9 O5 G3 w" j7 aEnd Function , ^ r U5 I% d7 L 4 C$ ? F" {, e) G8 w) {1 lFunction truenum(n1, n2, vx) ! [! f1 @/ R- U. b* i; ~ ' ↑存储分数的书组 9 t; s3 u) S: U% c '默认n1>n2 ) p# K8 a( `+ j3 X3 z Dim p, v1, v2 5 L: |/ h/ b8 `, Y v1 = n1+ d8 j0 u+ a! k v2 = n2! f6 r' d V: i B1 N- _ '下面把v1拆份成为每个数字尽可能大,数量尽可能少的组合8 _- x! }+ f% M7 W- N5 n* C p = 100# g* J- n: e5 y Do While v1 > 1 And p > 12 I ?+ l6 p9 m4 s. W# J9 p If v1 Mod vx(p) = 0 Then5 v8 l' F- f! j6 ^: n, N v1 = v1 \ vx(p)& j! @" C5 f% |) Z2 `8 _ vx(p) = 0 '用过的数字设置0 . K3 e; j9 _5 s End If9 o+ u; L: p; P! n2 f; b# f& O p = p - 1 + ]; R W# S3 u1 s1 p1 X Loop ' R/ d) _" |& L( z3 V( |9 N '下面一样尝试把v2拆份成为每个数字尽可能大,数量尽可能少的组合,但是v1用过的数字不能再用/ ]) k3 N. S7 F( y- Q p = 100 3 J) K0 H, p2 `% x- W Do While v2 > 1 And p > 1 " _0 O% F% Y& o/ y If vx(p) <> 0 Then 1 Q5 C! V/ ?+ j/ {0 N l8 l If v2 Mod vx(p) = 0 Then , n* h& [1 Z$ ~# Q4 V2 Z+ J; q0 K: F v2 = v2 \ vx(p) ! \' k R6 [5 _( i9 A vx(p) = 0, [2 R0 U- F% H& G! ] j End If: ~# {0 n9 C" r; ]0 } T9 v, z End If6 y4 K4 ~% d% R! a$ D0 y- U p = p - 15 H; }; A( e- Q! M. M Loop) s( L2 W6 }/ C m '查分成功则结果v2应该是1,如果v1占用了v2必需的数字就会拆份失败 / b$ ]% r7 @4 s2 Y; I If v2 = 1 Then truenum = 0 Else truenum = 1 2 o8 @4 n1 m: g. @0 xEnd Function 9 ^6 o) a5 H) V$ ^ ! _4 U; g. I) H5 b4 @Function startprc(n, inpath, outpath) % b- ~$ V! |5 Q0 P7 j ' ↑气球个数1 G% |2 k k! D2 w ' ↑输入文件路径 A% }" A- Q4 x6 X1 f" \ ' ↑输出文件路径 0 s( S6 w O' H$ A5 b+ I Dim nx(2), singlenum(), cnt / |4 m2 h" a* T3 ]/ g( S! e" Q3 Q ReDim singlenum(n)( f& F i7 k, f. L' \( { 3 @: W+ b) @& } Set fso = CreateObject("scripting.filesystemobject") . h; y) a @: C# p If fso.fileexists(inpath) Then+ ~9 e& D8 n$ Y% R' o; i. P: B* ~ Set inf = fso.opentextfile(inpath) 6 H6 e/ ]1 c8 O# Y: s( l# | Set outf = fso.createtextfile(outpath, 1) , g5 w# H$ ~0 A8 y3 U0 _ Do While Not (inf.AtEndOfStream)* {( [, [3 s/ {$ d# [) z1 a% q For i = 1 To n ) J2 R2 {$ T% c* o singlenum(i) = i '写入每个球的分数 / X# C1 {5 q6 b( I Next* C2 M v6 j7 w7 G' J# J5 ^ '读取两个数5 q% m: E7 w* q3 L8 d* {& u nx(0) = scanfnum(inf) 5 s# \% k% B, W- l- g3 e9 ?/ ] nx(1) = scanfnum(inf) ) P5 i5 Y9 g X- e/ r# |: V) E If nx(0) <> "error" And nx(1) <> "error" Then, G+ `' l6 P& T/ W8 O7 u If nx(0) < nx(1) Then Q; S7 U! x9 I5 Q9 S" p '大叔在前 ! M" m A( n" r# j1 m+ Z nx(2) = nx(0) ; E+ l! x* s5 P* M7 { nx(0) = nx(1) ( \+ `* K, A6 i" E" y: x. q$ Z9 t+ H nx(1) = nx(2)& ^: x+ m0 `/ H/ E5 [6 I End If/ t# Y2 z) L% O' G _ q opp = truenum(nx(0), nx(1), singlenum) ( Y& n0 x" h) W: n9 O# W0 i outf.writeline nx(opp)$ Q. ]$ y" S% k9 O. t& z End If) {. J( F% E, }8 Q Loop # o3 @2 b6 X; Y/ J7 u' ^5 D: y6 O End If $ q1 ]3 R: P. hEnd Function+ g! v# b! u z) }9 v$ m7 X '*************************** 3 }' j: B( P+ [4 c'这里开始运行 2 B8 }" D1 l z. m+ t0 u9 b# T'***************************5 F' t6 K3 {/ b; L5 Y! I startprc 100, "input.txt", "output.txt" . H, t3 |) Q& h. n9 I ' ^9 E# @: V2 t4 {, D6 V6 _! }: J3 D6 w R5 T 1 H' \) p2 j, H' s$ v+ X; J* n5 I! }1 _7 a8 f: l
[此贴子已经被作者于2004-5-10 14:36:26编辑过]
2 j2 a) d( i3 [" N

本版积分规则

关闭

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

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