主题:求助:一道难题
烦人
[专家分:40] 发布于 2006-04-08 14:38:00
键盘输入一个数字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 楼
JRX [专家分:180] 发布于 2006-08-07 09:45:00
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 楼
FFKK [专家分:1610] 发布于 2009-06-23 17:01:00
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 楼
oqoq [专家分:130] 发布于 2009-06-23 17:28:00
.............................!
14 楼
1054122 [专家分:750] 发布于 2009-06-23 20:30:00
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 楼
FFKK [专家分:1610] 发布于 2009-06-28 17:09:00
input n
k=1
b=0
while k<n
print k
b=b+1
k=k*2
wend
print"total:";b;" numbers."
我来回复