| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2043 人关注过本帖, 1 人收藏
标题:问题请教 关于17人围圈问题!
只看楼主 加入收藏
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:29 
问题请教 关于17人围圈问题!
有这样一个程序题 万望高手不吝赐教!有17个人围成一圈(编号为0~16),第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后生一个人为止,问此人原来的位置号是多少? 请教了!
搜索更多相关主题的帖子: 多少 
2009-09-01 00:07
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
贴出你的代码!~
2009-09-01 03:44
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:6 
好辛苦啊,脑子真不好使啊!
不过总算编出来了……
程序还是挺简洁的!
Option Explicit

Private Sub Form_Click()
'声明a()数组,存贮17个自然数
Dim a(16) As Integer, i As Integer, m As Integer, s As Integer, t As Integer

m = 17

For i = 0 To 16
a(i) = i + 1
Next i

Do While s <> 1
 '检验是否为3的倍数
 For i = 0 To 16
 If a(i) Mod 3 = 0 Then
 a(i) = 0
 Else
 t = i
 End If
 Next i
 '循环报数
 For i = 0 To 16
 If a(i) <> 0 Then
 m = m + 1
 a(i) = m
 End If
 Next i
 '检验是否只剩下最后一个数
 s = 0
 For i = 0 To 16
 If a(i) <> 0 Then
 s = s + 1
 End If
 Next i
Loop
Print "编号为" & t
Print "Last number " & "(编号)" & t & "is " & a(t) - 1




End Sub


向前走着……
2009-09-01 15:44
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:0 
此人原来的位置号是11

无知
2009-09-02 16:22
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
收藏
得分:0 
根据草纸上演算结果 应该是11才对啊 而不应该是10 望回复!
我的基本思路是这样的 先把1到17通过循环赋值给数组a()然后再通过循环开始除去被三整除的数 每当除去一个数 就把该数后面的数依次向前移动一位,这样就去掉了本三整除的数,而形成新的数组 通过第一轮循环的结果应该是
a(0)=
a(0)=
a(0)=
a(0)=
2009-09-02 17:25
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
收藏
得分:0 
根据草纸上演算结果 应该是11才对啊 而不应该是10 望回复!
我的基本思路是这样的 先把1到17通过循环赋值给数组a()然后再通过循环开始除去被三整除的数 每当除去一个数 就把该数后面的数依次向前移动一位,这样就去掉了本三整除的数,而形成新的数组 通过第一轮循环的结果应该是
a(0)= 1
a(1)= 2
a(2)=4
a(3)=5
a(4)=7
a(5)=8
a(6)=10
a(7)=11
a(8)=13
a(9)=14
a(10)=16
a(11)=17
a(0)=
a(0)=
a(0)=
a(0)=
a(0)=
2009-09-02 17:28
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
从简单的情况入手
2009-09-02 17:28
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
收藏
得分:0 
第 6 楼   得分:0      
根据草纸上演算结果 应该是11才对啊 而不应该是10 望回复!
我的基本思路是这样的 先把1到17通过循环赋值给数组a()然后再通过循环开始除去被三整除的数 每当除去一个数 就把该数后面的数依次向前移动一位,这样就去掉了本三整除的数,而形成新的数组 通过第一轮循环的结果应该是
a(0)= 1
a(1)= 2
a(2)=4
a(3)=5
a(4)=7
a(5)=8
a(6)=10
a(7)=11
a(8)=13
a(9)=14
a(10)=16
a(11)=17
a(12)= 17
a(13)= 17
a(14)= 17
a(15)=17
a(16)=17 在循环当中设置计数器,用于计算被除去数的个数,用17减去这个数就得到了移动后的新数组的元素个数,再通过循环把后面多余的数组元素去掉,之后再把这个新数组,通过下标控制对接到原来的老数组的尾部,并从尾部开始依次往后处理能被三整除的数 重复以上步骤,直到计数器的值为一 把计数器为一时的这个元素打印出来 问这种思路的错误在哪里
2009-09-02 17:40
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
收藏
得分:0 
multiple1902 您好!能举例说明吗 ?
2009-09-02 18:16
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
收藏
得分:0 
可否说下您的基本思路是什么?
2009-09-02 18:18
快速回复:问题请教 关于17人围圈问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015630 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved