生成牌      
# include  <stdio.h>  
# include  <time.h>  
# include  <stdlib.h>  
# define  M  1   
# define  N  20   
# define  TOTAL_NUMS  ( N -  M +  1 )   
int  main ( )  { 
    int  cards[ TOTAL_NUMS] ; 
    int  i,  j; 
    int  id1,  id2; 
    int  swap_temp; 
    
    srand ( time ( NULL ) ) ; 
    
    for  ( j =  1 ;  j <=  20 ;  j++ )  { 
        
        for  ( i =  0 ;  i <  TOTAL_NUMS;  i++ )  { 
            cards[ i]  =  M +  i; 
        } 
        
        for  ( i =  0 ;  i <  TOTAL_NUMS;  i++ )  { 
            id1 =  rand ( )  %  ( TOTAL_NUMS) ; 
            id2 =  rand ( )  %  ( TOTAL_NUMS) ; 
            swap_temp =  cards[ id1] ; 
            cards[ id1]  =  cards[ id2] ; 
            cards[ id2]  =  swap_temp; 
        } 
        
        printf ( "第%02d副牌:" ,  j) ; 
        for  ( i =  0 ;  i <  TOTAL_NUMS;  i++ )  { 
            printf ( "%3d" ,  cards[ i] ) ; 
        } 
        printf ( "\n" ) ; 
    } 
    getchar ( ) ; 
} 
  
生成牌结果   
 
 洗牌算法      
# include  <time.h>  
# include  <stdlib.h>  
# include  <stdio.h>  
# define  NUM  10  
void  swapInt ( int  * a,  int  * b) ; 
void  knuthShuffle ( int  a[ ] ,  int  n,  int  b[ ] [ NUM] ) ; 
void  swapInt ( int  * a,  int  * b)  { 
    int  t; 
    t =  * a; 
    * a =  * b; 
    * b =  t; 
} 
void  knuthShuffle ( int  a[ ] ,  int  n,  int  b[ ] [ NUM] )  { 
    int  i; 
    for  ( i =  n -  1 ;  i >=  1 ;  i-- )  { 
        swapInt ( & a[ i] ,  & a[ rand ( )  %  ( i +  1 ) ] ) ;  
        
        
    } 
    for  ( i =  0 ;  i <  n;  i++ )  { 
        b[ a[ i]  -  1 ] [ i] ++ ;  
    } 
} 
int  main ( )  { 
    int  i,  j,  sum,  a[ NUM] ,  b[ NUM] [ NUM]  =  { 0 } ; 
    srand ( time ( NULL ) ) ; 
    for  ( i =  0 ;  i <  NUM;  i++ )  {  
        a[ i]  =  i +  1 ; 
    } 
    for  ( j =  0 ;  j <  10000 ;  j++ )  {  
        knuthShuffle ( a,  NUM,  b) ;  
    } 
    printf ( "牌面" ) ; 
    for  ( i =  0 ;  i <  NUM;  i++ )  { 
        printf ( " 位置%02d次数" ,  i +  1 ) ; 
    } 
    printf ( "  总次数" ) ; 
    printf ( "\n" ) ; 
    for  ( i =  0 ;  i <  NUM;  i++ )  { 
        printf ( " %02d " ,  i +  1 ) ; 
        for  ( j =  0 ,  sum =  0 ;  j <  NUM;  j++ )  { 
            if  ( b[ i] [ j]  >  0 )  { 
                printf ( "%8d   " ,  b[ i] [ j] ) ; 
                sum +=  b[ i] [ j] ; 
            } 
        } 
        printf ( "%7d" ,  sum) ; 
        printf ( "\n" ) ; 
    } 
    getchar ( ) ; 
} 
  
洗牌结果