主题:求:m个1和n个0组成不同的数!!!
lml1996
[专家分:30] 发布于 2007-05-30 21:47:00
[em10][em10][em18][em10](头晕咯)
回复列表 (共3个回复)
沙发
Matodied [专家分:7560] 发布于 2007-06-01 12:21:00
不就是组合吗?
(n+m个当中取n个组合,这些位置放0,其余的位置放1)
(不过第1个不能放0,只要检测一下不就得了)
CLS
INPUT m, n
DIM a(n)
FOR i = 1 TO n: a(i) = i: NEXT i
a = 0
DO
i = n
DO
a(i) = a(i) + 1
IF i <= n THEN FOR j = i + 1 TO n: a(j) = a(j - 1) + 1: NEXT j
IF a(i) <= (n + m) + i - n AND a(1) <> 1 THEN EXIT DO
i = i - 1
IF i = 0 THEN PRINT a: END
LOOP
s$ = ""
FOR i = 1 TO n + m
f = 1
FOR j = 1 TO n
IF a(j) = i THEN f = 0: EXIT FOR
NEXT j
s$ = s$ + LTRIM$(STR$(f))
NEXT i: PRINT s$
a = a + 1
LOOP
END
快点加分,要是在这个月底我得不到2000分我找你。
板凳
lml1996 [专家分:30] 发布于 2007-06-02 14:59:00
哦!我知道了!
3 楼
Matodied [专家分:7560] 发布于 2007-06-03 10:19:00
组合的通用程序还可以用递归,上例可修改为:
DECLARE SUB find (i!)
DECLARE SUB pri ()
CLS
DIM SHARED m, n, a
INPUT m, n: a = 0
DIM SHARED a(n)
CALL find(1)
PRINT a
END
SUB find (i)
FOR j = 1 TO m + n
a(i) = j: f = 1
IF a(i) <= a(i - 1) THEN f = 0
IF f THEN
IF i < n THEN
CALL find(i + 1)
ELSE
IF a(1) <> 1 THEN a = a + 1: CALL pri
END IF
END IF
a(i) = 0
NEXT j
END SUB
SUB pri
FOR i = 1 TO m + n
f = 1
FOR j = 1 TO n
IF a(j) = i THEN f = 0: EXIT FOR
NEXT j
s$ = s$ + LTRIM$(STR$(f))
NEXT i: PRINT s$
END SUB
两种方法哪个好,你自己看吧!
我来回复