回 帖 发 新 帖 刷新版面

主题:求助:一道难题

键盘输入一个数字N,用尽量少的互不重复的数字表示出1~~N之间所有的数,至少需要几个数,有多少种不同的可能。
例N=6
至少需要3个不同的数字,有2种可能:(1,2,3)和(1,2,4)。

用(1,2,3)三个数表示出1~~6之间的所有数。
1=1
2=2
3=3
4=1+3
5=2+3
6=1+2+3

或(1,2,4)
1=1
2=2
3=1+2
4=4
5=1+4
6=2+4

回复列表 (共15个回复)

11 楼

INPUT N
DIM A(100)
A(1)=1:J=1
DO
  S=0
  FOR K=1 TO J 
    S=S+A(K)
  NEXT K
  J=J+1:A(J)=S+1
LOOP UNTIL A(J)>=N

12 楼


DECLARE SUB myprint (n%, v%())
DECLARE SUB mytest (b%, e%, s%, v%())
DIM n, m, k, t, i AS INTEGER
DIM v(34) AS INTEGER
m% = 1
v%(1) = 1
t% = 1
INPUT n%
WHILE m% < n%
    t% = t% + 1
    v%(t%) = m% + 1
    m% = m% + m% + 1
WEND
k% = m% - n%
IF t% <= 2 THEN CALL myprint(t%, v%()) ELSE CALL mytest(3, t%, k%, v%())
SUB myprint (n%, v%())
    DIM i AS INTEGER
    FOR i% = 1 TO n%
        PRINT v%(i%);
    NEXT
    PRINT
END SUB
SUB mytest (b%, e%, s%, v%())
    DIM k, l, x, i AS INTEGER
    l% = 1
    FOR i% = 1 TO e% - b%
        l% = l% * 2
    NEXT
    k% = s% \ l%
    FOR i% = k% TO 0 STEP -1
        x% = s% - l% * i%
        IF v%(b%) - i% > v%(b% - 1) THEN
            v%(b%) = v%(b%) - i%
            IF b% = e% THEN CALL myprint(e%, v%()) ELSE CALL mytest(b% + 1, e%, x%, v%())
            v%(b%) = v%(b%) + i%
        END IF
    NEXT
END SUB

13 楼

.............................!

14 楼

CLS
INPUT x
FOR i = 1 TO x
  FOR j = 1 TO x
    FOR k = 1 TO x
      IF x = i + j + k THEN
        PRINT x; "="; i; "+"; j; "+"; k
      END IF
    NEXT k
  NEXT j
NEXT i
END

15 楼

input n
k=1
b=0
while k<n
  print k
  b=b+1
  k=k*2
wend
print"total:";b;" numbers."

我来回复

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