C趣味程序百例(18)拉丁方 |
|
www.nanhushi.com 佚名 不详 |
58.拉丁方 构造 NXN 阶的拉丁方阵(2<=N<=9),使方阵中的每一行和每一列中数字1到N只出现一次。如N=4时: 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 *问题分析与算法设计 构造拉丁方阵的方法很多,这里给出最简单的一种方法。观察给出的例子,可以发现:若将每 一行中第一列的数字和最后一列的数字连起来构成一个环,则该环正好是由1到N顺序构成;对于第i行,这个环的开始数字为i。按照 此规律可以很容易的写出程序。下面给出构造6阶拉丁方阵的程序。 *程序与程序注释 #include<stdio.h> #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<N;j++) /*构造N个不同的拉丁方阵*/ { for(i=0;i<N;i++) { t=(i+j)%N; /*确定该拉丁方阵第i 行的第一个元素的值*/ for(k=0;k<N;k++) /*按照环的形式输出该行中的各个元素*/ printf("%d",(k+t)%N+1); printf("\n"); } printf("\n"); } } *运行结果 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
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 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
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: C趣味程序百例(17)谁家孩子跑最慢 下一篇文章: C趣味程序百例(18)填表格 |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|