C趣味程序百例(18)拉丁方

字號(hào):

58.拉丁方
     構(gòu)造 NXN 階的拉丁方陣(2<=N<=9),使方陣中的每一行和每一列中數(shù)字1到N只出現(xiàn)一次。如N=4時(shí):
     1 2 3 4
     2 3 4 1
     3 4 1 2
     4 1 2 3
    *問題分析與算法設(shè)計(jì)
     構(gòu)造拉丁方陣的方法很多,這里給出最簡單的一種方法。觀察給出的例子,可以發(fā)現(xiàn):若將每 一行中第一列的數(shù)字和最后一列的數(shù)字連起來構(gòu)成一個(gè)環(huán),則該環(huán)正好是由1到N順序構(gòu)成;對(duì)于第i行,這個(gè)環(huán)的開始數(shù)字為i。按照 此規(guī)律可以很容易的寫出程序。下面給出構(gòu)造6階拉丁方陣的程序。
    *程序與程序注釋
    #include
    #define N 6 /*確定N值*/
    void main()
    {
     int i,j,k,t;
     printf("The possble Latin Squares of order %d are:\n",N);
     for(j=0;j     {
     for(i=0;i     {
     t=(i+j)%N; /*確定該拉丁方陣第i 行的第一個(gè)元素的值*/
     for(k=0;k     printf("%d",(k+t)%N+1);
     printf("\n");
     }
     printf("\n");
     }
    }
    *運(yùn)行結(jié)果
     The possble Latin Squares of order 6 are:
     1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2
     2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3
     3 4 5 6 1 2 4 5 6 1 2 3 5 6 1 2 3 4
     4 5 6 1 2 3 5 6 1 2 3 4 6 1 2 3 4 5
     5 6 1 2 3 4 6 1 2 3 4 5 1 2 3 4 5 6
     6 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 1
     4 5 6 1 2 3 5 6 1 2 3 4 6 1 2 3 4 5