1.	将2^n个0和2^n 个1,排成一圈。从任一个位置开始,每次按逆时针的方向以长度为n+1的单位进行数二进制数。
    要求给出一种排法,用上面的方法产生出来的2^(n+1)个二进制数都不相同。
例如,当n=2时, 即2^2个0 和2……2个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统计二进制数是否已出现过。
程序清单
  PROGRAM NOI00;
VAR
   A             : ARRAY[1..36] OF  0..1;
       B             :ARRAY[0..31] OF  INTEGER;
       I, J, K, S, P : INTEGER;
  BEGIN
     FOR I:=1 TO 36 DO  A[I]:=0;
      FOR I:=28 TO 32 DO  A[I]:=1;
     P:=1; A[6]:=1;
     WHILE  (P=1)  DO
       BEGIN
         J:=27;
         WHILE  A[J]=1  DO  J:=J-1;
                 a[j]:=1;           
         FOR  I:=J+1 TO 27 DO         a[i]:=0;           
         FOR  I:=0  TO 31 DO  B[I]:=0;
         FOR  I:=1 TO 32 DO
          BEGIN
                     s:=0;             
             FOR  K:=I  TO  I+4  DO  S:=S*2+A[K];
                      b[s]:=1;             
          END;
         S:=0;
         FOR  I:=0  TO 31 DO  S:=S+B[I];
         IF        s=32            THEN  P:=0
        END;
     FOR  I:=1 TO 32 DO   FOR J:=I TO I+4 DO WRITE(A[J]);
  WRITELN
  END. 
			
				
							  
							 
				
			
		 	
			
		
			
							 
				2.	多项式的乘法。
   例如有如下多项式:
         P(X)=2X2-X+1,   Q(X)=X+1
   则:
         P(X)•Q(X)=(2X2-X+1)(X+1)=2X3+X2+1
   
  程序说明:
    多项式的表示:系数、指数
    如上例中:    P(X):  系数   指数          Q(X)    系数     指数
                            2       2                     1       1
                            -1  	 1                     1       0
                            1       0                     0       0
                            0       0
    PXQ的结果存入C中。其输出格式是:依次用一对括号内的(系数,指数)分别来表示。如上例的输出结果表示为:(2,3)(1,2)(1,0)
程序清单
PROGRAM NOI_007;
  VAR 
        I, J, K, L , JP, JQ, JC, X, Y, X1, Y1  :  INTEGER;
        P, Q :  ARRAY[1..10,1..2]  OF  INTEGER;
        C :  ARRAY[1..20,1..2]  OF  INTEGER;
  BEGIN
    
    JP:=0;
    READLN(X,Y);    
  WHILE X<>0 DO
      BEGIN   JP:=JP+1;  P[JP,1]:=X;  P[JP,2]:=Y;  READLN(X,Y)   END;   
    JQ:=0;
READLN(X,Y);
    WHILE X<>0 DO
      BEGIN   JQ:=JQ+1;  Q[JQ,1]:=X;  Q[JQ,2]:=Y;  READLN(X,Y)   END;     
     JC:=1;  C[JC,1]:=0;  C[JC,2]:=-1000;
     FOR  I:=1 TO JP DO
       BEGIN
             x:=p[i,1];               
      Y:=P[I,2];
          FOR  J:=1 TO JQ DO
            BEGIN
                        x1:=x*q[j,1];                   
       Y1:=Y+Q[J,2];
              K:=1;
              WHILE  Y1<C[K,2]  DO  K:=K+1;
              IF  Y1=C[K,2]  THEN        c[k,1]:=c[k,1]+x1            
                             ELSE
                                 BEGIN
                                    FOR  L:=JC DOWNTO K DO
                                     BEGIN
                                       C[L+1,1]:=C[L,1]; 
                    C[L+1,2]:=C[L,2]
                                  END;
                           C[K,1]:=X1;  C[K,2]:=Y1;
                                   jc:=jc+1             
                       END
          END
      END;
    FOR  I:=1 TO JC DO
      IF       c[i,1]<>0              THEN  WRITE(‘(’,C[I,1],‘,’,C[I,2],')');
    READLN
 END.