1.题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
例如:如果输入如下矩阵:
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。
http://zhedahht.blog.163.com/blog/static/254111742010111112236313/
上文中给出了一种方法,但比较麻烦。
以下是本人的解法:
#include<iostream>
#include<iomanip>
using namespace std;
#define N 4
int main()
{
int a[N][N];//当然数组也可以根据N的输入来动态建立
int i,j,k=1;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=k++;
cout<<setw(3)<<a[i][j];//打印出来
}
cout<<endl;
}
for(int m=0;m<(N+1)/2;++m)//循环条件
{
for(j=m;j<N-m;++j)//第m行,m从0开始
cout<<a[m][j]<<" ";
for(i=m+1;i<=N-m-1;++i)//第N-1-m列
cout<<a[i][N-m-1]<<" ";
for(j=N-m-2;j>=m;j--)//第N-1-m行
cout<<a[N-m-1][j]<<" ";
for(i=N-m-2;i>m;--i)//第m列
cout<<a[i][m]<<" ";
}
cout<<endl;
return 0;
}
2.题目:
输入N,按顺时针方向打印N*N矩阵
比如 N=3,打印 比如 N=4,打印 1 2 3 1 2 3 4 8 9 4 12 13 14 5 7 6 5 11 16 15 6 10 9 8 7
以下是本人的解法:
#include<iostream> #include<iomanip> using namespace std; #define N 4 int main() { int a[N][N];//当然数组也可以根据N的输入来动态建立 int i,j,k=1; for(int m=0;m<(N+1)/2;++m)//循环条件 { for(j=m;j<N-m;++j)//第m行,m从0开始 a[m][j]=k++; for(i=m+1;i<=N-m-1;++i)//第N-1-m列 a[i][N-m-1]=k++; for(j=N-m-2;j>=m;j--)//第N-1-m行 a[N-m-1][j]=k++; for(i=N-m-2;i>m;--i)//第m列 a[i][m]=k++; } for(i=0;i<N;i++) { for(j=0;j<N;j++) { cout<<setw(3)<<a[i][j];//打印出来 } cout<<endl; } return 0; }
个人认为这两个题目非常相似,故解法也非常类似。