首先谢谢大家对我提出问题的关注!尤其感谢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