甲、乙、丙、丁四人共有糖若干块,甲先拿出一些糖分给另外三人,使他们三人的糖数加倍;乙拿出一些糖分给另外三人,也使他们三人的糖数加倍;丙、丁也照此办理,此时甲、乙、丙、丁四人各有16块,编程求出四个人开始各有糖多少块。
解决方案 »
- LineTo MoveTo 在线求指教
- access adp项目中如何传递某控件的值给sql的条件
- 新手select case age的问题
- 高手帮忙 如何在VB6.0里面把数据导入到水晶报表9里
- 请问MSChart如何与RecordSet绑定数据的问题,谢谢!
- 本人所在公司需软件开发- 急!!!
- 在VB中利用Click事件打开已有的WORD,EXCEL,PPT,OUTLOOK文件,进行编辑保存
- 高分寻求一段源代码
- 能给按钮控件增加一个类似于Tag的属性吗?
- 在用VB编程时发现如果在调用API时如果不采集返回值就不能用括号将参数括起来,否则会有错误。反之如果要返回值,就必须不要括号。但现在
- MysticBoy建群一个,VB程序员或对编程感兴趣的同僚请加
- 反过来如何实现两个Byte组合成一个Byte?
就用a,b,c,d代表甲、乙、丙、丁各人的糖块,操作一次记录一次
比如说甲分出去后则:a-b-c-d,2b,2c,2d
后面的你自己想想吧
to weaest
这个题目的结果是不唯一的!
to guao
逆推第一步是很容易的,后面的你再试试。
Dim a(4) As Integer
a(1) = 16
a(2) = 16
a(3) = 16
a(4) = 16
Dim i As Integer
Dim j As Integer
For i = 4 To 1 Step -1 '若需要增加分糖人数就自己改一下吧
For j = 1 To 4
If j <> i Then
a(i) = a(i) + a(j) / 2
a(j) = a(j) / 2
End If
Next
Print a(i) / 2 ^ (i - 1)
Next
End Sub
Dim a(1 To 4) As Long
Dim i As Long
a(1) = 16
a(2) = 16
a(3) = 16
a(4) = 16For i = UBound(a) To LBound(a) Step -1
Call Rtn(i, a())
NextFor i = LBound(a) To UBound(a)
Debug.Print a(i)
NextEnd SubSub Rtn(ByVal lIndex As Long, a() As Long)
Dim i As Long
For i = LBound(a) To UBound(a)
If i <> lIndex Then
a(lIndex) = a(lIndex) + a(i) / 2
a(i) = a(i) / 2
End If
Next
Dim a(1 To 4) As Long
Dim i As Long
a(1) = 16
a(2) = 16
a(3) = 16
a(4) = 16
'a(...)
For i = UBound(a) To LBound(a) Step -1
Call Rtn(i, a())
Next
For i = LBound(a) To UBound(a)
Debug.Print a(i)
Next
End SubSub Rtn(ByVal lIndex As Long, a() As Long)
Dim i As Long
For i = LBound(a) To UBound(a)
If i <> lIndex Then
a(lIndex) = a(lIndex) + a(i) / 2
a(i) = a(i) / 2
End If
Next
End Sub
大家请注意: 分给其他三个人指的是: 其他三个人分的糖的总数之和加倍!!!! 并不是说让其余三个人每一个人的糖数加倍!! 这下子大家明白了?? 若让每一个人都加倍,呵呵,我看也用不着问了!! 谢谢大家!继续努力!!
中间结果就不用了!因为同一个初始值,有很多分发达到最后所要求的结果!
只要能证明这一组数能够有方法分成最后大家都是16,就输出,然后进行下一组数的验证。
Dim i As Integer, j As Integer
'甲
a = a / 2
For i = 0 To a
For j = 0 To a - i
If step2(a, b + i, c + j, d + a - i - j) Then Exit Sub
Next
Next
End Sub
Private Function step2(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer) As Boolean
'乙
Dim i As Integer, j As Integer
If b Mod 2 <> 0 Then Exit Function
b = b / 2
For i = 0 To b
For j = 0 To b - i
If step3(a + i, b, c + j, d + b - i - j) Then step2 = True
Exit Function
Next
Next
End Function
Private Function step3(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer) As Boolean
'丙
Dim i As Integer, j As Integer
If c Mod 2 <> 0 Then Exit Function
c = c / 2
For i = 0 To c
For j = 0 To c - i
If step4(a + i, b + j, c, d + c - i - j) Then step3 = True
Exit Function
Next
Next
End Function
Private Function step4(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer) As Boolean
'丁
Dim i As Integer, j As Integer
If d <> N / 2 Then Exit Function
d = d / 2
For i = 0 To d
For j = 0 To d - i
If step5(a + i, b + j, c + d - i - j, d) Then step4 = True
Exit Function
Next
Next
End Function
Private Function step5(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer) As Boolean
If a = b And b = c And c = d Then
Text1.Text = Text1.Text & aa(0) & " " & aa(1) & " " & aa(2) & " " & aa(3) & " " & vbCrLf
step5 = True
End If
End Function
Private Sub Command2_Click()
Dim i As Integer, j As Integer
Dim a As Integer, b As Integer, c As Integer, d As Integer
Text1.Text = ""
For a = 2 To N Step 2
For b = 0 To N - a
For c = 0 To N - a - b
aa(0) = a
aa(1) = b
aa(2) = c
aa(3) = N - a - b - c
Step1 a, b, c, N - a - b - c
Next
Next
Next
End Sub
'算出来结果还是有点少