時空限制 1000ms/128mb
乙個n×n的拉丁正方形含有整數1-n,且在任意的行或列中都不出現重複資料,一種可能的6×6拉丁正方形如下:
6 3 1 4 2 5
1 4 5 6 3 2
5 6 2 1 4 3
2 1 3 5 6 4
3 5 4 2 1 6
4 2 6 3 5 1
該拉丁方陣的產生方法是:當給出第一行數後,就決定了各數在以下各行的位置,即第一行數為各數在每行中列數的索引表(首先找到某數所在位置(下標),然後以此數在序列中的位置為起始)。
比如上例中:
第1行的第1個數為6,則該數在1—6行的列數依次為1,4,2,5,6,3(6的下標為1,在第一行序列6 3 1 4 2 5中找到1,將1排在開頭重排序列則為1 4 2 5 6 3為數字6在各行的位置)
第1行的第2個數為3,則該數在1—6行的列數依次為2,5,6,3,1,4
第1行的第3個數為1,則該數在1—6行的列數依次為3,1,4,2,5,6
第1行的第4個數為4,則該數在1—6行的列數依次為4,2,5,6,3,1
第1行的第5個數為2,則該數在1—6行的列數依次為5,6,3,1,4,2
第1行的第6個數為5,則該數在1—6行的列數依次為6,3,1,4,2,5
請你寫乙個程式,產生按上述方法生成的拉丁方陣。
第一行整數n(不大於100);
第二行為1~n的n個數。
按上述方法生成的拉丁方陣。
66 3 1 4 2 5
6 3 1 4 2 5
1 4 5 6 3 2
5 6 2 1 4 3
2 1 3 5 6 4
3 5 4 2 1 6
4 2 6 3 5 1
#includeusing namespace std;
const int n = 105;
int n,a[n],b[n][n];
int main() //a[i]序號i+1在a值中位置pos
for (int j=0; jb[j][a[(pos+j)%n]-1]=a[i]; //a下標0開始,值1開始
} for (int i=0; ireturn 0;
}
拉丁方陣(非正交拉丁方陣)
include include include include includeusing namespace std int main else num i 1 i for i 0 i n i 外迴圈保證輸出n行 for j i j n i j 內迴圈輸出一行的每個數字 cout 拉丁方陣 據說普魯...
演算法 拉丁方陣(Latin Square)
拉丁方陣 英語 latin square 是一種n n的方陣,在這種 n n 的方陣裡,恰有n 種不同的元素,每一種不同的元素在同一行或同一列裡只出現一次。以下是兩個拉丁方陣舉例 拉丁方陣有此名稱是因為瑞士數學家和物理學家尤拉使用拉丁字母來做為拉丁方陣裡的元素的符號。演算法步驟 1 package ...
七階拉丁方陣 C語言 輸出N階拉丁方陣並統計個數
題目如下 在 行 列的數陣中,數 在每行和每列 現且僅 出現一次,這樣的數陣叫 階拉丁方陣。例如下圖就是乙個五階拉丁方陣。編一程式,從鍵盤輸入 值後,列印出所有不同的 階拉丁方陣,並統計個數。1 2 3 4 5 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4 incl...