注册 登录
编程论坛 新人交流区

[求助]问大家个C编程的题??

jiangxiao 发布于 2007-11-09 11:54, 1662 次点击


请教高手给编个程序,用C
将自然数按下图所示的次序存到N×N的二维数组A中
举例(5×5的),在数组中这样放
1 2 9 10 25

4 3 8 11 24

5 6 7 12 23

16 15 14 13 22

17 18 19 20 21

24 回复
#2
kuteboy2007-11-09 13:01
#include<stdio.h>
#define N 5
main()
{ int A[N][N];
int i,j;
for(i=0;i<N;i++)
{ printf("enter %d integer:",N);
for(j=0;j<N;j++)
scanf("%d",&A[i][j]);
}
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
{ printf("%d ",A[i][j]);
}
printf("\n");
}
}
运行后按你想存储的顺序输入数据就行了.

[此贴子已经被作者于2007-11-9 13:02:21编辑过]

#3
蓝羽翼2007-11-09 13:17

#4
wuzhenyu2007-11-09 13:41
1楼正解
#5
clwang2007-11-09 14:15
1lou强
#6
混混亮仔2007-11-09 15:09
应该是说输入的数存入的位置是那样子吧
#7
jisg_572007-11-09 19:52

晕,用两个for 循环不就行了吗?

#8
yybruce2007-11-10 15:04
路过,学习
#9
jiangxiao2007-11-12 18:48
1楼的兄弟,你这样是可以的,但你看看我题的意思,是要输出N×N的
但是不是你先放到数组,再输出,这个谁也会
题中输入条件(也就是已知条件)就一个,那就是N
要求你输入10就得输出10×10得
看看题了
不过谢谢你
#10
codelet2007-11-13 10:36

你说的是魔方阵的问题吧?我可以发一个我自己写的,没验过输入大奇数会不会造成内存空间失败


#include <iostream.h>
#include <iomanip.h>
void magic(int n)
{
//如果是偶数,返回
if((n % 2 == 0) || n <= 1)
return;
int i, j;

//定义两个矩阵,由它们确定输出结果
int **I, **J;
I = new int*[n];
J = new int*[n];
for (i = 0; i < n; i++)
{
I[i] = new int[n];
J[i] = new int[n];
}

//求矩阵I 和 J 的值
int t = (n - 1) / 2;
for(i = 0; i < n; i ++)
I[0][i] = J[0][n-1-i] = (t + i) % n + 1;
for(i = 1; i < n; i ++)
for(j = 0; j < n; j++)
{
I[i][j] = J[i][n - 1 - j] = I[i - 1][(n - 1 + j)%n];
}
//输出结果,是N * N 的矩阵
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
cout << setw(3) << n * (I[i][j] - 1) + J[i][j] << ' ';
}
cout << endl;
}
// cout << endl << "每行每列之和为: ";
// for (i = 0, t = 0; i < n; i++)
// t += n * (I[0][i] - 1) + J[0][i];
// cout << t << endl;

//释放空间
for(i = 0; i < n; i++)
{
delete []I[i];
delete []J[i];
}
delete []I;
delete []J;
}

#11
codelet2007-11-13 10:48
//输出结果,是N * N 的矩阵
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
cout << setw(3) << n * (I[i][j] - 1) + J[i][j] << ' '; //根据自己需要更改,也可以去掉
}
cout << endl;
}

对于大奇数,可以将结果输出到文本文件中,方便查看结果
#12
bayforever2007-11-13 11:32
楼上符合题意。
#13
xuefeng_zzg2007-11-14 09:11
codelet强
#14
parksun2007-11-14 14:50
回复:(kuteboy)#include#define N ...
强,支持一下
#15
parksun2007-11-14 15:06
回复:(codelet)//输出结果,是N * N 的矩阵for(i =...
同意,楼上
#16
鹏宝2007-11-14 15:09
羡慕ing.....
#17
行文2007-11-14 15:17
回复:(kuteboy)#include#define N ...

看来新手区高手也很多,是啊,你可以用数组和俩个for循环去解决问题。

#18
lihuilogin2007-11-14 16:31

学习了,帮忙顶一下..

#19
futt882007-11-14 16:32
。。高手啊。。厉害。
#20
wangfengLLD2007-11-14 16:57
自己试过了,下面的这个方法绝对可以,请将没有声明的变量声明成int类型。
printf("\n please input a number:");
j=0;
scanf("%d",&j);
if(j<0)
{
printf("\nThe number is illegal!\n");
return 0;
}
int a[j][j];
a[1][1]=1;
a[1][2]=2;
a[2][2]=3;
k2=2;
k3=2;
z=0;
z1=0;
for(k1=4;k1<=j*j;k1++)
{
if(k2 == 1)
{
if(z1==0)
{
k3++;
z1=1;

}
else
{
k2++;
z1=0;
k22=1;
}
a[k2][k3]=k1;
continue;
}
if(k3==1)
{
if(z1==0)
{
k2++;
z1=1;
}
else
{
k3++;
z1=0;
k33=1;
}
a[k2][k3]=k1;
continue;
}
if(k3 == k2)
{
k22=0;
k33=0;

if(z == 0)
{
z=1;
}
else
{
z=0;
}
}
if(z == 0)
{
if(k22 == 0)
{
k2--;
}
else
{
k2++;
}
a[k2][k3]=k1;
continue;
}
if(z==1)
{
if(k33 == 0)
{
k3--;
}
else
{
k3++;
}
a[k2][k3]=k1;
continue;
}
}
for(k1=1;k1<=j;k1++)
{
for(k2=1;k2<=j;k2++)
{
printf("\t %d",a[k1][k2]);
}
printf("\n");
}
#21
gothikwang2007-11-14 17:08
方法很多,关键在于简洁。
#22
lwc862007-11-14 18:05
强人就是强人!!
#23
cn005404012007-11-14 18:24

厉害啊

#24
devil_v62007-11-14 18:25
支持
#25
jiangxiao2007-11-20 09:18

问一下20楼的,怎么C不认int a[j][j]
说编译错误呀

1