请教大佬们一个问题
vb吧
全部回复
仅看楼主
level 9
程序功能:降序组合
即给定两个自然数N和R,其中N>R,输出从数1到N中按降序顺序取R个自然数的所有组合。
比如,N=5,R=3,则运行程序后结果如图所示。
但代码部分我看得不是很明白,希望大佬们给本菜鸟简单解释一下。代码放楼下
2021年12月05日 12点12分 1
level 9
Private Sub Command1_Click()
Dim n As Integer, r As Integer
Dim a(1 To 20) As Integer
n = InputBox("")
r = InputBox("")
i = 1
a(1) = n
Do While True
If i <> r Then
If a(i) > r - i Then
a(i + 1) = a(i) - 1
i = i + 1
Else
i = i - 1
a(i) = a(1) - 1
End If
Else
For j = 1 To r
Print a(j);
Next j
Print
If a(r) = 1 Then
i = i - 1
a(i) = a(i) - 1
Else
a(i) = a(i) - 1
End If
End If
If a(1) = r - 1 Then
Exit Do
End If
Loop
End Sub
2021年12月05日 12点12分 2
level 9
图片版
2021年12月05日 12点12分 3
level 11
楼主代码里有一个a(i)=a(1)-1,R=4就可能出现死循环,应该改为a(i)=a(i)-1[滑稽]
2021年12月05日 13点12分 5
level 15
学编程应该先分析问题得出思路,然后根据思路写出代码,不应该反过来从代码反推思路
比如这个题,应该用什么思路来解决呢?
首先能想到的是多重循环,但是这里的循环层数R是变量,就没法写代码了
那么还可以怎么办呢?可以用一个数组保存每次选出来的数字,就从最大的可能组合开始填起,然后先从最后一个数字开始,每次减1,就得到一个新的组合;当最后一个数字减到0时,这个组合就是不可行的了,就需要让它前面的数字减1了,它自己再重新从大到小走一轮;同理,当倒数第二个数字减到1时,也就没有可行的组合了,需要让它前面的数字减1,后面两个数字继续上面的循环;如此重复,直到第一个数字减到R-1了,所有的组合就都找完了
关于这段代码,我想吐槽的一点是,为什么要用Exit Do来结束循环呢?明明可以写成“直到(Until)这个条件”时结束循环,把条件写在Do或者Loop后面啊
2021年12月06日 02点12分 6
1