| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2043 人关注过本帖, 1 人收藏
标题:问题请教 关于17人围圈问题!
取消只看楼主 加入收藏
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:7 
问题请教 关于17人围圈问题!
有这样一个程序题 万望高手不吝赐教!有17个人围成一圈(编号为0~16),第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后生一个人为止,问此人原来的位置号是多少? 请教了!
搜索更多相关主题的帖子: 多少 
2009-09-01 00:07
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
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
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
收藏
得分:0 
首先谢谢大家对我提出问题的关注!尤其感谢promising的耐心和细心,只是当时设置该题时分值较少了些,所以。。。。。还望各位见谅,
另外对于promising提出的问题给出我的思路及代码,前面的步骤我演算过了,还算正确,只是最后一步打印的结果不符,我想不通!还望指教!
思路如下:
首先定义一个足够长的数组,a(100),定义s,并赋初值为17,用来记录数值中元素个数
定义两个新的变量 初值(chuzhi)终值(zongzhi)用来控制把新的数组接到原数组a(1)~a(17)的尾部
对数组初始化(我把数组从a(1)开始赋值,把通过运算最后得到的结果减1)
a(1)a(2)a(3)a(4)a(5)a(6)a(7)a(8)a(9)a(10)a(11)a(12)a(13)a(14)a(15)a(16)a(17)
 1    2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17

do循环开始
判断 s是否为1 不为1 执行下面步骤
把对能被三整除的数组下标所标的元素置零,并每置零一次把计数器减一
(第一次)
a(1)a(2)a(3)a(4)a(5)a(6)a(7)a(8)a(9)a(10)a(11)a(12)a(13)a(14)a(15)a(16)a(17)
 1    2   0   4   5   0   7   8   0   10   11    0   13   14    0  16   17
通过循环判断a(i)的值 若为零,则该元素后面的元素依次前移 得到新数组
a(1)a(2)a(3)a(4)a(5)a(6)a(7)a(8)a(9)a(10)a(11)a(12)a(13)a(14)a(15)a(16)a(17)  
 1    2   4   5   7   8  10  11  13   14   16   17   0    0     0    0    0
把得到的新数组结尾(把上次循环变量i的终值赋值给chizhi,把i+s-1 赋值给zongzhi)
用 for i= chuzhi to zongzhi
 a(i)=(i-chuzhi+1)
next i 完成结尾
得到
a(1)a(2)a(3)a(4)a(5)a(6)a(7)a(8)a(9)a(10)a(11)a(12)a(13)a(14)a(15)a(16)a(17)   
 1    2   4   5   7   8  10  11  13   14   16   17   0    0     0    0    0
a(18)a(19)a(20)a(21)a(22)a(23)a(24)a(25)a(26)a(27)a(28)a(29)   
   1    2   4     5   7     8   10   11   13   14   16   17  
然后再仅对接在尾部的新数组以下标来作为新报数(范围chuzhi到zongzhi),并判断该报数是否能被3整除(对于a(1)~a(17)不再做任何处理)再回头进行 do 循环 直到 s=1
最后打印最后一次得到数组中那个不为零的数组元素减一的值 ,即是它原来的位置
我的代码如下:

Private Sub Form_Click()
Dim s As Integer  '用于计数,记录数值中元素不为零的个数
Dim j As Integer, i As Integer '定义两个循环变量
Dim chizhi As Integer, zongzhi As Integer '定义用于把每次处理的数组接在上次数组尾部初值与终值
Dim a(100) As Integer '定义一个足够大的数组,用来存储原数组和要拼接在尾部的新数组
For i = 1 To 17 '为数组循环赋值
a(i) = i
Next i
s = 17
zongzhi = 17
chuzhi = 1
Do While s <> 1
For i = chuzhi To zongzhi '通过循环找出能被三整除的报号(即a数组的下标),把以该报号为下标的数组元素赋值为零
  If i Mod 3 = 0 Then
   a(i) = 0
   s = s - 1
  End If
Next i
For i = chuzhi To zongzhi '通过循环判断数组a中元素是否为零,若为零把该元素后面的元素依次前移
  If a(i) = 0 Then
     For j = i To zongzhi
      a(j) = a(j + 1)
     Next j
  End If
Next i
chuzhi = i '为要接在原数组尾部的经过处理的新数组,定义下标初值
zongzhi = i + s - 1 '为要接在原数组尾部的经过处理的新数组,定义下标终值
For j = chuzhi To zongzhi '用循环把新数组接在原数组尾部
a(j) = a(j - chuzhi + 1)
Next j
Loop
Print a(j) - 1
End Sub



2009-09-03 20:22
wwj1860
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-8-31
收藏
得分:0 
刚才回复中的s是记录非零元素的个数
2009-09-03 20:24
快速回复:问题请教 关于17人围圈问题!
数据加载中...
 
   



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

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