您的位置:首页 > 其它

顺时针输出矩阵

2016-09-20 19:49 141 查看
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:

10 11 12 1

9 16 13 2

8 15 14 3

7 6 5 4

输入直接输入方陈的维数,即n的值。(n<=100)
输出输出结果是蛇形方陈。
样例输入
3


样例输出

7 8 1
6 9 2
5 4 3


#include

int main()
{
int a,b,n,sum=1;
int M[101][101];
scanf("%d",&n);

for(a=0;a<=(n-1)/2;a++)
{
for(b=a;b<=n-a-1;b++)   M[b][n-a-1]=sum++;   //M[0][2]  M[1][2] M[2][2]

for(b=n-2-a;b>=a;b--)    M[n-1-a][b]=sum++;   //M[2][1]  M[2][0]

for(b=n-2-a;b>=a;b--)    M[b][a]=sum++;       //M[1][0]  M[0][0]

for(b=a+1;b<=n-2-a;b++)  M[a][b]=sum++;       //M[[0][1]

}

for(int i=0;i


*****************************************   相关
 *********************************************

【剑指offer】顺时针打印矩阵:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

注意:1)for(int i=0;i<res.size(); i++)
  cout<<res[i];

          2)int M[101][101];

              for(int i=0; i<row; i++)

                  for(int j=0; j<col; j++)

                         cin>>M[i][j];

           3)vector<int> res;
 
int left=0, top=0, right= col-1, bottom = row-1;
while(left <= right && top <= bottom)
{
for(int i=left; i<=right; i++)             res.push_back(M[top][i]);
for(int i=top+1; i<=bottom; i++)     res.push_back(M[i][right]);

if(top!=bottom)
for(int i=right-1; i>=left; i--)   res.push_back(M[bottom][i]);

if(left!=right)
for(int i=bottom-1; i>top; i--) res.push_back(M[i][left]);

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