注册 登录
编程论坛 C++教室

[讨论]从c区看到的,搬过来看看!

aipb2007 发布于 2007-06-24 00:04, 1645 次点击

在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


贴吧!

[此贴子已经被作者于2007-6-24 0:05:09编辑过]

31 回复
#2
谁与争疯2007-06-24 00:07
aipb先贴。你写了吗?
#3
aipb20072007-06-24 00:14
没有。你先吧,让给你!呵呵~
#4
谁与争疯2007-06-24 00:15

#include <stdio.h> 
int n;
int i,j;
int main()
{
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("%d",i);
for (j=0;j<n;j++) printf(" %d",(i+j)%n+1);

putchar('\n');
}
return 0;
}

#5
aipb20072007-06-24 00:18
这里是c++教室哦!!!

呵呵~
#6
谁与争疯2007-06-24 00:19
  那你就把输入输出改一改嘛...
#7
aipb20072007-06-24 00:21
对了,这个图形应该有很多个吧,不一定总从1开始啊?

是不是哦?
#8
谁与争疯2007-06-24 00:23
从什么数开始,都还是这个模样的图形嘛...
#9
谁与争疯2007-06-24 00:25
好了,撤退了。
睡觉,明天还要加班。
#10
HJin2007-06-24 02:05

problem solved in C++. See my post in [全民编程]76道高难度C++练习题.含NOI竞赛题.欢迎挑战.

[此贴子已经被作者于2007-6-24 6:55:07编辑过]

#11
herbert_19872007-06-24 08:39
以下是引用aipb2007在2007-6-24 0:21:28的发言:
对了,这个图形应该有很多个吧,不一定总从1开始啊?

是不是哦?

但是输出是从左上角开始的, 不从1开始, 从哪开始呢?

#12
I喜欢c2007-06-24 09:38
以下是引用谁与争疯在2007-6-24 0:15:50的发言:

#include <stdio.h> 
int n;
int i,j;
int main()
{
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("%d",i);
for (j=0;j<n;j++) printf(" %d",(i+j)%n+1);

putchar('\n');
}
return 0;
}

这该不也是copy过来的吧?

这是c++诶...

#13
aipb20072007-06-24 09:52
以下是引用herbert_1987在2007-6-24 8:39:07的发言:

但是输出是从左上角开始的, 不从1开始, 从哪开始呢?

我意思是:

23451
34512
45123
51234
12345
…………
…………

#14
I喜欢c2007-06-24 09:53

#include<iostream>
using namespace std;
int main()
{
int n;
int i,j;
cin>>n;
for (i=1;i<=n;i++)
{
for (j=0;j<n;j++)
(i+j)<=n?cout<<(i+j)<<" ":cout<<(i+j-n)<<" " ;

cout<<endl;
}
return 0;
}

这样还是可以的...

#15
I喜欢c2007-06-24 09:55

#include<iostream>
using namespace std;
int main()
{
int n;
char i,j;
cin>>n;
for (i=1;i<=n;i++)
{
for (j=0;j<n;j++)
(i+j)<=n?cout<<(i+j)<<" ":cout<<(i+j-(char)n)<<" " ;

cout<<endl;
}
return 0;
}

#16
herbert_19872007-06-24 10:00
以下是引用aipb2007在2007-6-24 9:52:53的发言:

我意思是:

23451
34512
45123
51234
12345
…………
…………

oh, I see.

#17
aipb20072007-06-24 10:38
看置顶贴里吧,这个问题不是那么简单的!
#18
I喜欢c2007-06-24 11:02
#include<iostream>
using namespace std;
int main()
{
int n;
char i,j,k;
cin>>n;
for(k=0;k<n;k++){
for (i=1;i<=n;i++){
for (j=0;j<n;j++)
(i+j+k)<=n ? cout<<(i+j+k)<<" ":
(i+j+k)<=2*n ? cout<<(i+j+k-(char)n)<<" ":
cout<<(i+j+k-2*(char)n)<<" " ;
cout<<endl;
}
cout <<endl<<endl;
}
return 0;
}

这样ok了哇?
不过算法复杂度比较高...
DEV-C++ 通过..
#19
aipb20072007-06-24 11:09
以下是引用I喜欢c在2007-6-24 11:02:17的发言:
#include<iostream>
using namespace std;
int main()
{
int n;
char i,j,k;
cin>>n;
for(k=0;k<n;k++){
for (i=1;i<=n;i++){
for (j=0;j<n;j++)
(i+j+k)<=n ? cout<<(i+j+k)<<" ":
(i+j+k)<=2*n ? cout<<(i+j+k-(char)n)<<" ":
cout<<(i+j+k-2*(char)n)<<" " ;
cout<<endl;
}
cout <<endl<<endl;
}
return 0;
}

这样ok了哇?
不过算法复杂度比较高...
DEV-C++ 通过..

还是想简单了。
n = 5 时有 161280 种,根据那人的程序。
嘿嘿。

#20
I喜欢c2007-06-24 12:21

那没有办法..
那么多,怎么打印..
只有改哈题目要求了,
(每行或列:数值按‘循环升序’排。
比如:1,2,3,4。 2,3,4,1..........)

#21
COOL鬼步2007-06-25 20:37
请教各位大哥个问题```有也个程序不会写````有会 的请帮个忙好吗?
矩阵运算
设计要求:设计一个矩阵类
实现矩阵的求逆。转置
实现矩阵的加减乘除
我的QQ是331346263
帮忙的贵人请联系我```手机13721400445 28号要上交````
#22
游乐园2007-06-25 21:38

基础的东西最好自己动手写一写 ...

程序代码:

#include<iostream>
#include<iomanip>
using namespace std;


enum { N=4 };


class matrix;
matrix operator + (matrix& x1,matrix& x2);


class matrix
{
int a[N][N];
public:
matrix(int n = 0);
void reverse_matrix(); //顺时针逆转
void show_matrix();
friend matrix operator + (matrix& x1, matrix& x2); //矩阵加法
};
matrix::matrix(int n)
{
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
a[i][j] = n++;
}
void matrix::reverse_matrix()
{
int i, j, b[N][N];
for(i=0; i<N; i++)
for(j=0; j<N; j++)
b[j][N-i-1] = a[i][j];


for(i=0; i<N; i++)
for(j=0; j<N; j++)
a[i][j] = b[i][j];
}


void matrix::show_matrix()
{
for(int i=0; i<N; i++,cout<<endl)
for(int j=0;j<N;j++)
cout<<setw(4)<<a[i][j];
cout<<endl;
}


matrix operator + (matrix& x1, matrix& x2)
{
matrix sum;
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
sum.a[i][j] = x1.a[i][j] + x2.a[i][j];
return sum;
}


int main()
{
matrix x1(1);//矩阵1
x1.show_matrix();
x1.reverse_matrix();//逆转矩阵1
x1.show_matrix();
matrix x2(2);//矩阵2
x2.show_matrix();
(x1+x2).show_matrix();//相加


return 0;
}

#23
aipb20072007-06-25 21:56
回复:(游乐园)基础的东西最好自己动手写一写 ......
大哥,怎么突然间这么有空啊!呵呵~
#24
游乐园2007-06-25 22:10
下午打篮球时间长了 有点累 , 晚上就上网消遣了

你呢? 该期末考试了吧
#25
aipb20072007-06-25 22:18
恩,我在复习啊
《计算机组成与结构》
英文的,我都很少去上,连本书都没的,就有几大篇题,实在看不进去。
#26
游乐园2007-06-25 22:21
COA 吧  呵呵 ..我们前年考过,也是英文,我也很好听课,但还是蛮有用的哦 ...
#27
yuyunliuhen2007-06-25 22:23
还好我考的不是E文的
#28
游乐园2007-06-25 22:24

我们计算机课程都是E文的

#29
aipb20072007-06-25 22:27

我哭了
本来开始都有兴趣,但是那个外教的印度英语我实在听不惯。

慢慢就没去了。
#30
yuyunliuhen2007-06-25 22:31
别说外教了,本来对外教慢感兴趣的,可把水平提高一点点,可听了那个埃及人教授的课后,我再也对外教不感冒了

读E文的书慢好啊,不过可能费时点
#31
aipb20072007-06-25 22:35
埃及人?


呵呵`~
#32
yuyunliuhen2007-06-25 22:39
恩,还会一点中文呢,自己制作了几张介绍埃及的光碟,用中文介绍的。不过中文说的有点。。。
1