关于拉丁方阵的问题

feijie89 2010-01-12 09:17:27
这个题把我困扰了一天了,希望各位前辈帮我解答一下,
在N行N列的数阵中, 数K(1〈=K〈=N)在每行和每列中出现且仅出现一次,这样的数阵叫N阶拉丁方阵。例如下图就是一个五阶拉丁方阵。编一程序,从键盘输入N值后,打印出所有不同的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
=====================================
我用
#include "stdio.h"
void main()
{
int i,j,k,n;
scanf("%d",&n);
for(k=0;k<n;k++){
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",(j+i+k)%n+1);
}
printf("\n");
}
printf("=====================\n");
}
}

只能列出一部分来,谢谢啊
...全文
218 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
feijie89 2010-01-13
  • 打赏
  • 举报
回复
就是想知道算法啊
feijie89 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 z569362161 的回复:]
C/C++ code#include"stdio.h"int main()
{int i,j,k,n;for(scanf("%d",&n),k=0;k<n;k++,printf("=====================\n"))for(i=0;i<n;printf("\n"),i++)for( j=0;j<n;printf("%d",(j+i+k)%n+1),j++);
}

没错误啊!
[/Quote]
就是不完全啊,如果是个6阶的拉丁方,这种算法只能列出6个,而实际上应该有6!*6!个吧
z569362161 2010-01-12
  • 打赏
  • 举报
回复
#include "stdio.h"
int main()
{ int i,j,k,n;
for(scanf("%d",&n),k=0;k<n;k++,printf("=====================\n"))
for(i=0;i<n;printf("\n"),i++)
for( j=0;j<n;printf("%d ",(j+i+k)%n+1),j++);
}


没错误啊!
macrojj 2010-01-12
  • 打赏
  • 举报
回复
首先每一行就是那么几种组合。然后你根据这几种组合 再组合成一个矩阵。
jxxx2967 2010-01-12
  • 打赏
  • 举报
回复
看起来有点复杂哦
现面懒得动脑了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧