您的位置:首页 > 编程语言 > C语言/C++

c和c++的一些训练题(10)(打印螺旋方阵)

2015-03-19 22:57 344 查看
问题的提出:编写螺旋方阵。其中螺旋方阵形式如下:

1 12 11 10

2 13 16 9

3 14 15 8

4 5 6 7

设row,column分别代表行、列坐标,变量p从1到n2将p依次存入数组a[row][column]中,要确定row、colomn的变化情况。分析:建立一个二维动态数组,建立方法见前一篇文章,然后观察方阵的第一列跟第二列之间的关系,第n行和第n-1行之间的关系,第n列和第n-1列之间的关系,第一行跟第二行之间的关系,根据他们之间的关系,列出表达式就能得到最终结果。大家如果有好的想法可以共同探讨,我参考了下别人的想法,但大部分思路还是自己原创的。

代码:

// test4.cpp : 定义控制台应用程序的入口点。
//这是打印的最终目标
//1  12 11 10
//2  13 16 9
//3  14 15 8
//4  5  6  7

#include "stdafx.h"
#include <iostream>
#include <iomanip>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"请输入方阵的维数:";
cin>>n;
cout<<"打印二维数组:"<<endl;
//声明动态二维数组
int **data;
data=new int *
;
for(int i=0; i<n; i++)
{
data[i]=new int
;
}
//初始化二维数组
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
data[i][j]=0;
}
}
//对二维数组赋值
int m=1;
int i,j;
int round=1;

for(i=0; i<= n/2; i++)
{
//左列
for(j=0; j<(n-2*(round-1)); j++)//0~4 0~2
{
data[j+round-1][round-1]=m++;
}
//下行
for(j=0; j<(n-2*(round-1)-1); j++)  //0~3
{
data[n-round][j+round]=m++;
}
//右列
for(j=0; j<(n-2*(round-1)-1); j++)
{
data[n-j-round-1][n-round]=m++;
}
//上行
for(j=0; j<(n-2*round); j++)
{
data[round-1][n-j-round-1]=m++;
}
round++;
}

//打印二维数组
for(i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
cout<<left<<setw(3)<<data[i][j]<<" ";
}
cout<<endl;
}
//销毁二维数组
for(i=0; i<n; i++)
{
delete[] data[i];
}
delete[] data;
system("pause");
return 0;
}
结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: