养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

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

时间:2024-11-07 04:37:25

中年大叔,起步学习编程,边学边分享;昨日,看到约瑟夫约环的考题,可以练习近来学习的VB或VBA编程语言.介绍约瑟夫环,指的是N(5个人)个学生按顺序围坐在一起,从一个学生开始报数,当报数到M(当报数为3)时,这个学生出局(出局后此人停止报数),下一人继续从1开始报数;问最后一个出局的人是哪位?依次出局的顺序?

工具/原料

利用EXCEL

使用vb语言

一台电脑(本)`_~

方法/步骤

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

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

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

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

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

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

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

4、5.初值完毕蒹筻分虞后.使用循环语句for...next和do.....loop(1)Forp=polTo1St髫潋啜缅ep-1'循环语句,设置lv()数组5个为true.其他为falselv(p)=TrueNextp(2)DoWhilehav>1'先循环到剩下的人为大于1时停止,Iflv(p)And(cModm)=0Then'两个条件当前位置为true,并且是3hav=hav-1'执行三个动作剩下的人减1;此位置人已离开;显'示到表格A1中出局人序号lv(p)=FalseSheet1.Range("a1")=Sheet1.Range("a1")&”_”&pEndIf......loop上面循环设置了出局的人;然后,再设置学生报数过程.

5、6.报数设置诔罨租磊Ifp=pol+1Thenp=1'为什么不是p>polthenp=1呢?因为这样会使p惺绅寨瞀'一直为1,可以试一下.Iflv(p)Thennum=numModm+1'只有lv()是true时,才会继续报数,否'则跳过.

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

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

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

7、8.借鉴之用约瑟夫谪藁钴碳环的问题:Sub约瑟夫()Dimpol%,num%,hav%,p%,m%Dimlv(1To100)AsBooleanm=3‘逢m出列pol=5:荏鱿胫协num=1:p=1‘pol个人数,num报数,p当前位置hav=pol‘剩下的人数Forp=polTo1Step-1lv(p)=TrueNextpp=1DoWhilehav>1Iflv(p)And(cModm)=0Thenhav=hav-1lv(p)=FalseSheet1.Range("a1")=Sheet1.Range("a1")&”_”&pEndIfp=p+1Ifp=pol+1Thenp=1Iflv(p)Thennum=numModm+1LoopForp=1TopolStep1Iflv(p)ThenSheet1.Range("b1")=Sheet1.Range("b1")&pNextEndSub不忘记学习,哪怕是我年令大了,哪怕是希望渺小;已坚持半年多,自学了c语言,现感觉学习VB,简单.....

© 一点知识