[讨论]拉丁方阵问题
在N行N列的数阵中,数K(1<=K<=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
编一程序,从键盘输入N值后,打印出所有不同的N阶拉丁方阵,并统计个数。
大家试着做做看。
#include <stdio.h>
#define N 7
int main()
{
int i, j;
for (i = 1; i <= N; i++)
{
for (j = i; j < N + i; j++)
printf("%3d", (j - 1) % N + 1);
printf("\n");
}
return 0;
}
还算法不算好,但大家可以接一下。
#include<stdio.h>
#define N 20
int main(void)
{
int i;
for(i=1;i<=N*N;i++)
(i%N+i/N>N)?
printf("%2d ",i%N+i/N-N):
(i==N)?
printf("%2d\n",i):
(i!=N&&i%N==0)?
printf("%2d\n",i%N+i/N-1):
printf("%2d ",i%N+i/N);
return 0;
}