拉丁正方形
就是求拉丁正方形个数问题是:
一种正方形的数字编排 1 2 3 4 5 2 1 4 5 3 3 4 5 1 2 4 5 2 3 1 5 3 1 2 4 是一个5*5的拉丁正方形,每个1到5的整数在每行每列都出现且出现一次。写个程序计算N*N的的拉丁正方形的总数且要求第一行是: 1 2 3 4 5.......N 你的程序应该算称呼任意的从2到7的N(Your program should work for any N from 2 to 7)
输入
一行包含一个整数N
输出
只有一行没,表示拉丁正方形的个数,且拉丁正方形的第一行为 1 2 3 . . . N.
样例输入
5
样例输出
1344
然后我VC++6.0编的代码 求各位大神修改
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
int main()
{
int a[N],i,j,k,t,s[N][N],*p,l,m,n,w=0;
scanf("%d",&l);
for(i=1;i<=l;i++)
{
a[i-1]=i;
}
for(i=1;i<=l;i++)
{
s[1][i]=i;
}
loop: ;
p=a;
for(m=2,n=1;m<=l,n<=l;n++)
{
for(i=1,j=1;i<m;j++)
{
for(;p<p+l;p++)
{
if(*p!=s[i][j])
{
s[m][n]=*p;
}
}
if(j==l)
{
i++;
}
}
m++;
}
w++;
for(i=1;i<=l;i++)
{
a[i-1]=i+1;
if(a[i-1]>l)
{
a[i-1]=a[i-1]-l;
}
}
if(a[0]!=1)
{
goto loop;
}
printf("%d\n",w);
return 0;
}