利用vb编程速解--约瑟夫环的问题

时间:2024-10-12 10:35:26

1、打开任意一个EXCEL表格,在上面"开发工具"(若没有,可以在"文件"--"选项"--"自定义功能区"中选择开发工具即可); 然后打开左上角"visual basic"编辑器2.打开后,出现如下图,选择"模块" ( 注意在左侧点击鼠标右键,即可增加模块项),开始吧!

利用vb编程速解--约瑟夫环的问题
利用vb编程速解--约瑟夫环的问题

2、问题规则:例如五个人报数,当数到3时那个人出局,接着下一人再报数,一直到最后一个人.

利用vb编程速解--约瑟夫环的问题

3、声明变量: 学生人数 plo 学生报数 num 当前学生位置 p 当前位置学生是否离开(布尔类型) lv 逢m出局 m 剩下的人数 hav 初始设值: pol=5; num=1; p =1; lv(p)=true; m=3; hav=5

利用vb编程速解--约瑟夫环的问题

4、初值完毕后. 使用循环语句for...next 和 do .....loop (1) For p = polTo 1 Step -1 '循环语句,设置lv()数组5个为true.其他为false lv(p) = True Next p(2) Do While hav> 1'先循环到剩下的人为大于1时停止, If lv(p) And (c Mod m) = 0 Then '两个条件当前位置为true,并且是3 hav= hav- 1 '执行三个动作 剩下的人减1;此位置人已离开;显 '示到表格A1中出局人序号 lv(p) = False Sheet1.Range("a1") = Sheet1.Range("a1") &”_”&p End If...... loop 上面循环设置了出局的人;然后,再设置学生报数过程.

5、报数设置 If p = pol+ 1 Then p = 1 '为什么不是p>pol then p=1 呢?因为这样会使p '一直为1,可以试一下.If lv(p) Then num= numMod m + 1 '只有lv()是true时,才会继续报数,否 '则跳过.

利用vb编程速解--约瑟夫环的问题

6、改变条件: 学生人数 plo=8 逢m出局 m=7结果......如图可见 (只修改了红圈的内容,6处哦!)

利用vb编程速解--约瑟夫环的问题

7、借鉴之用约瑟夫环的问题:Sub 约瑟夫()Dim pol%, num%, hav%, p%,m%Dim lv(1 To 100) As Booleanm = 3 ‘逢m出列pol= 5: num= 1: p = 1‘pol个人数, num报数, p当前位置hav= pol ‘剩下的人数For p = polTo 1 Step -1lv(p) = TrueNext pp = 1Do While hav> 1If lv(p) And (c Mod m) = 0 Thenhav= hav- 1lv(p) = FalseSheet1.Range("a1") = Sheet1.Range("a1") &”_”&pEnd Ifp = p + 1If p = pol+ 1 Then p = 1If lv(p) Then num= numMod m + 1LoopFor p = 1 To polStep 1If lv(p) Then Sheet1.Range("b1") = Sheet1.Range("b1") & pNextEnd Sub不忘记学习,哪怕是我年令大了,哪怕是希望渺小;已坚持半年多,自学了c语言,现感觉学习VB,简单.....

© 手抄报圈