旋转方阵妙解

 

#include<iostream>

#include<stdio.h>

#include<conio.h>

using namespace std;

int a[21][21];

int main()

{

int n, n_2, i, j, count = 1;

cin>>n;

n_2 = n*n;

for (i=1; i<=n; i++)

for(j=1; j<=n; j++)

a[i][j] = 0;//初始化二维数组 ,都将其设为0; 

    i = 1; j = 1;

    while (count <= n_2)

    {

         while (i<=n && a[i][j]==0)

         {

               a[i][j] = count++;

               i++;

         }//直到执行完此循环后,才会执行下一个循环。

          //此循环的目的就是,排序第一列。 (j不变,i++)

         i--; j++; //经过i-- 运算之后i=n;经过j++运算之后,j=2; 

         while(j<=n && a[i][j]==0)

         {

               a[i][j] = count++;

               j++;

         }//此循环的目的是,排序最后一行 。(i不变,j++) 

         j--; i--;//经过j-- 运算之后j=n;经过i-- 运算之后, i=n-1; 

         while(i>=1 && a[i][j]==0)

         {

                a[i][j] = count++;

                i--;

         }//次循环的目的就是,排序最右边的一列。(j不变,i--) 

         i++; j--;//经过i++ 运算之后i=1;经过j-- 运算之后, j=n-1; 

         while(j>=1 && a[i][j]==0)

         {

                 a[i][j] = count++;   

                 j--;

         }//此循环的目的就是,排序最上面的一行。(i不变,j--) 

          //到此为止,最外面的一圈就算是排好了,很明显,四个循环的功能分别是

          //排序四个不同方向的数。 接下来就是填充实心了,道理相似。 

         j++; i++;//由于,不满足a[i][j]=0,所以提前结束循环,

                  //因此,经过j++运算之后,j=2; 

    }

    for (i=1; i<=n; i++)

    {

         for (j=1; j<n; j++)

             printf("%-4d",a[i][j]);

    printf("%-4d/n",a[i][n]);       

    }  

getch();

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值