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

问题的提出:编写螺旋方阵。其中螺旋方阵形式如下:

1 1211 10

2 1316 9

3 1415 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 *[n];for(int i=0; i<n; i++){data[i]=new int[n];}//初始化二维数组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;}结果:

累死累活不说,走马观花反而少了真实体验,

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

相关文章:

你感兴趣的文章:

标签云: