有趣的踩汽球问题.看看吧
谁能帮帮忙编出这个问题啊?儿童节时.两个人比赛踩汽球.汽球一百个.分别编号1~100.在相同的时间内.两个人一起去踩这100个汽球.他们的基数都为1.在踩了一个汽球后.乘上汽球的编号.再踩再乘.时间到后.两个把自己的乘到的结果报出来.分数高的人为胜.如果一方说慌.那就另一方胜了.
但考虑到是否有人慌报数字的问题.先定义分数低的那个人是真的.因为他没必要说慌.
因为两个人不可能踩同一个数字.所以可以根据把结果分解后的数字想比较.可以判断他们的结果有没有说慌.
比如.A的结果是147;B的结果是49.那么.A只能是49*3,而B也只能是1*49.因为B没有说慌.所以.A说慌了.那就是B胜了.
又如:A的结果是486.B的结果是81.那样的话.A除了分解为81*6外.还可以分解为9*54或者3*9*18等.而B.可以由1*81得到.也可以由3*27.A和B至少存在一组不重叠的编号.所以.分数高的A就胜了.
具体输入输入如:
Input
343 49
3599 610
62 36
Output
49
610
62 这个代码就你局的例子都没有问题
保存为.vbs文件
Function scanfnum(hfile)
'从文件中读取一个数字
Dim s, n, n_end
n = ""
s = ""
n_end = False
d_end = False
Do While Not (hfile.AtEndOfStream)
s = hfile.read(1)
Do While (s < "0" Or s > "9") And (Not (hfile.AtEndOfStream))
If n_end = True Then
d_end = True
Exit Do
End If
s = hfile.read(1)
Loop
If d_end Then Exit Do
If s >= "0" And s <= "9" Then
n = n + s
n_end = True
End If
Loop
If n = "" Then scanfnum = "error" Else scanfnum = CInt(n)
End Function
Function truenum(n1, n2, vx)
' ↑存储分数的书组
'默认n1>n2
Dim p, v1, v2
v1 = n1
v2 = n2
'下面把v1拆份成为每个数字尽可能大,数量尽可能少的组合
p = 100
Do While v1 > 1 And p > 1
If v1 Mod vx(p) = 0 Then
v1 = v1 \ vx(p)
vx(p) = 0'用过的数字设置0
End If
p = p - 1
Loop
'下面一样尝试把v2拆份成为每个数字尽可能大,数量尽可能少的组合,但是v1用过的数字不能再用
p = 100
Do While v2 > 1 And p > 1
If vx(p) <> 0 Then
If v2 Mod vx(p) = 0 Then
v2 = v2 \ vx(p)
vx(p) = 0
End If
End If
p = p - 1
Loop
'查分成功则结果v2应该是1,如果v1占用了v2必需的数字就会拆份失败
If v2 = 1 Then truenum = 0 Else truenum = 1
End Function
Function startprc(n, inpath, outpath)
' ↑气球个数
' ↑输入文件路径
' ↑输出文件路径
Dim nx(2), singlenum(), cnt
ReDim singlenum(n)
Set fso = CreateObject("scripting.filesystemobject")
If fso.fileexists(inpath) Then
Set inf = fso.opentextfile(inpath)
Set outf = fso.createtextfile(outpath, 1)
Do While Not (inf.AtEndOfStream)
For i = 1 To n
singlenum(i) = i '写入每个球的分数
Next
'读取两个数
nx(0) = scanfnum(inf)
nx(1) = scanfnum(inf)
If nx(0) <> "error" And nx(1) <> "error" Then
If nx(0) < nx(1) Then
'大叔在前
nx(2) = nx(0)
nx(0) = nx(1)
nx(1) = nx(2)
End If
opp = truenum(nx(0), nx(1), singlenum)
outf.writeline nx(opp)
End If
Loop
End If
End Function
'***************************
'这里开始运行
'***************************
startprc 100, "input.txt", "output.txt"
[此贴子已经被作者于2004-5-10 14:36:26编辑过]
页:
[1]