博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《算法设计与分析》:构造螺旋阵
阅读量:4482 次
发布时间:2019-06-08

本文共 1138 字,大约阅读时间需要 3 分钟。

螺旋阵:任意给定n*n值,按如下螺旋的方式输出方阵: n=3    输出:   1    8   7 2    9   6 3    4   5 n=4    输出:  1    12  11  10 2    13  16  9 3    14  15  8 4    5    6    7 思路: 1) 引入变量k,表示在某一方向的上数据的个数,k的初值是n 2) 每当数据存放到左下角时,k减1 3) 存放到右上角时,k再减1 4) 引入符号变量t,初值为+1,表示处理前半圈:左侧i向下变大,j向右变大 5) t变为-1:表示处理后半圈:右侧i向上变小,j向左变小 6) 于是一圈内下标的变化情况如下: j=1   i=i+t  1----n       k=n i=n   j=j+t  2----n      前半圈共2*k-1个 t= -t              k=k-1 j=n   i=i+t   n-1----1 i=1   j=j+t   n-1----2    后半圈共2*k-1个 t= -t                k=k-1 7) 用x模拟“摆放”的数据;用y(1~2*k-1)作循环变量,模拟半圈内数据的处理的过程。 8) 引入b[0]表示数组的行下标,b[1]表示数组的列下表,前半圈y<=k,y/(k+1)=0,后半圈,y/(k+1)=1,则b[y/(k+1)]=b[y/(k+1)]+t可代表半圈下标的变化  
代码:  
#include #include using namespace std;int main(){    int a[10][10];    int n;    scanf("%d",&n);    memset(a, 0, sizeof(a));    int x = 1;    int t = 1;    int k = n;    int b[2] = {0, 1};    while(x <= n * n){        for (int y = 1; y <= 2*k-1; y ++){            b[y/(k+1)] = b[y/(k+1)] + t;            a[b[0]][b[1]] = x ++;        }        k --,   t = -1 * t;    }    for (int i = 1; i <= n; i ++){        for (int j = 1; j <= n - 1; j ++){            printf("%d ",a[i][j]);        }        printf("%d\n",a[i][n]);    }    return 0;}
 

转载于:https://www.cnblogs.com/AbandonZHANG/archive/2012/12/30/4114191.html

你可能感兴趣的文章
Express中间件,看这篇文章就够了(#^.^#)
查看>>
《构建之法》(五)
查看>>
创建django项目
查看>>
Linux Bash基本功能
查看>>
一则小脚本(工作中用)
查看>>
软件工程结对作业
查看>>
Keil 4.0 生成bin文件
查看>>
sql语句的进化--hibernate篇
查看>>
python爬虫之cookie
查看>>
11.超市收银系统的项目
查看>>
2017年5月29号课堂笔记
查看>>
HDU4247【瞎搞】
查看>>
lightoj 1125【背包·从n个选m个】
查看>>
HDU 1243 反恐训练营(最长公共序列)
查看>>
mysql数据库隔离级别
查看>>
(六)buildroot使用详解
查看>>
chrome修改UserAgent,调试
查看>>
Source Insight4.0 试用。。试用。。试用。。
查看>>
python循环for,range,xrange;while
查看>>
hadoop的节点间的通信
查看>>