回 帖 发 新 帖 刷新版面

主题:求:m个1和n个0组成不同的数!!!

[em10][em10][em18][em10](头晕咯)

回复列表 (共3个回复)

沙发

不就是组合吗?
(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分我找你。

板凳

哦!我知道了!

3 楼

组合的通用程序还可以用递归,上例可修改为:
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

两种方法哪个好,你自己看吧!

我来回复

您尚未登录,请登录后再回复。点此登录或注册