1. 将2n个和2n个1,排成一个圈。从任一个位置开始,每次按逆时针的方向以长度为N+1的单位进行数二进制数。要求给出一种排法,用上面的方法产生出来的2n+1个二进制数都不相同。 例如,当N=2时,即22个0和22个1排成如下一圈: 位置开始比如,从A,逆时针方向取三个数000,然后再从B位置上开始取三个数001,接着从C开始取三个数010,…可以得到000,001,010,101,011,111,110,100共8个二进制数且都不相同。 程序说明 以N=4为例,即有16个0,16个1,数组A用以记录32个0,1的排法,数组B统计二进制数是否已出现过。 程序清单 10 DIM A(36),B(31) 20 FOR I=1 TO 36:A(I)=0:NEXT I 30 FOR I=28 TO 32:A(I)=1:NEXT I 40 P=1:A(6)=1 50 IF P=0 THEN 230 60 J=27 70 IF ① THEN 100 80 J=J-1 90 GOTO 70 100 A(J)=1 110 FOR I=J+1 TO 27: ② :NEXT I 120 FOR I=0 TO31:B(I)=0: NEXT I 130 FOR I=1 TO 32 140 ③ 150 FOR J=I TO I+4 160 S=S*2+A(J) 170 NEXT J 180 ④ 190 NEXT I 200 S=0 210 FOR I=0 TO 31:S=S+B(I):NEXT I 220 IF ⑤ THEN 50 230 P=0 240 FOR I=1 TO 32 245 FOR J=I TO I+4 246 PRINT A(J); 248 NEXT J,I:END
还有个图