二维数组请教 这个题怎么写

请编写一个 C++程序,根据用户输入的整数 N,首先生成一个 N× N 的二维数组,按行优先的方式在
该二维数组中填入 1~ N2 的数,然后按螺旋方式输出数组。下面是一个示例(输入为 16):
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16 输出: 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
(提示:可仿照上题动态生成二维数组,需考虑 N 为奇数时,中间元素的输出)

4个回答

二维数组最传统的方法就是嵌套循环

输入n,再利用for循环循环n²次输入数字(在控制台输入方式可多样),最后两层for循环输出即可。

双重for循环 ,轻松搞定 。

yungshallow
yungshallow 可是当N为奇数时 矩阵里的数填不满啊?
接近 3 年之前 回复

这是回文问题,给你一个类似的,我曾经写的但是刚好相反这个是从里往外输出
#endif
/*数组按如图的方式输出
21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
*/
#if 0
int main()
{
int a[5][5];
int i=2 ,j=2;//行与列
a[2][2]=1;
int b=1,s;
for (int m = 1;m<=5;m++)
{
if (m%2==0)s=-1;//判断i与j是加还是减
else
s = 1;
if ( i == 0)
{
for(int n = 1;n< m;n++)
{
++b;
j = j + s;
a[i][j] = b;
}
}
else
{
for(int n = 0;n< m;n++)
{
++b;
j = j + s;
a[i][j] = b;
}
for(int k = 0;k< m;k++)
{
++b;
i = i + s;
a[i][j] = b;
}
}
}

for(i = 0; i< 5;i++) 
{
    for( j = 0; j <5;j++)
        printf("%3d ",a[i][j]);
    printf("\n");
}
return 0;

}
#endif

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问