螺旋矩阵

1   2   3   4   5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

给定正整数N,输出如上所示N*N矩阵。

代码:

#include<stdio.h>
#include<iostream>
using namespace std;
int m[100][100];
int main()
{
    int N;
    int cnt;
    while(scanf("%d",&N)!=EOF)
    {
        cnt = 0;
        for(int i=0; i<N/2; ++i)
        {
            for(int j=i; j<N-1-i; ++j)
                m[i][j]=++cnt;
            for(int j=i; j<N-1-i; ++j)
                m[j][N-1-i] = ++cnt;
            for(int j=N-1-i; j>i; --j)
                m[N-1-i][j] = ++cnt;
            for(int j=N-1-i; j>i; --j)
                m[j][i] = ++cnt;
        }
        if(N%2==1)
            m[N/2][N/2] = ++cnt;
        for(int i=0; i<N; ++i)
        {
            for(int j=0; j<N; ++j)
                printf("%d ",m[i][j]);
            printf("\n");
        }
    }
    return 0;
}

时间: 2024-10-25 12:01:38

螺旋矩阵的相关文章

2014螺旋矩阵

题目描述 Description 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序,在格子中 依次填入 1, 2, 3, ... , n2,便构成了一个螺旋矩阵. 下图是一个 n = 4 时的螺旋矩阵. 1  2  3  4 12  13  14  5 11  16  15  6 10  9  8  7 现给出矩阵大小 n 以及 i 和

每日算法之四十一:Spiral Matrix II (螺旋矩阵)

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example, Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 针对这个问题采用最直观的方式即可,即螺旋插入,这里有两个地方需要注意,一个是插入边界的界定,

1050. 螺旋矩阵(25)

本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m-n取所有可能值中的最小值. 输入格式: 输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数.所有数字不超过104,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行n个数字,共m行.相邻数字以1个空格分隔,行末不得有多余空格. 输入样例: 12 37 76 20 98 76 42 53 95

leetcode-Spiral Matrix II 螺旋矩阵2之python大法好,四行就搞定,你敢信?

Spiral Matrix II 螺旋矩阵 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example,Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 真的不容易..看博客园有人面试碰到过这个问题,长篇

Java-基础编程(螺旋矩阵&amp;乘法表)

package cn.rick.study; import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner; /** * * @author Rick-bao date 2014-8-29 * */public class SomeBasicCode { public static void main(String[] args) { MultiplicationTable();//

HLG 1564 螺旋矩阵 (趣味C语言)

链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1564 Description 对于给定的一个数n,要你打印n*n的螺旋矩阵. 比如n=3时,输出: 1 2 3 8 9 4 7 6 5 Input 多组测试数据,每个测试数据包含一个整数n(1<=n<=32) Output 对于每组测试数据,输出一个n*n的螺旋矩阵,定义在题目描述里. 在一组测试数据中,每个数占的字符宽度

从外向内扩的螺旋矩阵

形如: 1   2   3   4  5 16 17 18 19  6 15 24 25 20  7 14 23 22 21  8 13 12 11 10  9 如果我们需要打印这样从外部向内扩展的n * n矩阵. 分析: 可以把矩阵分为n/2个圈, (上面的例子分了两个圈,最外面的圈就是12345~16,另外一个圈就是17~24) 我们只需要以圈为单位,给二维数组中的每个数赋值.赋值的顺序也是按照数字的递增顺序(顺时针) Java代码如下: public class SpiralMatrix

编程题之打印二维螺旋矩阵

当size=4时, 二维螺旋矩阵如下图所示: 规律总结 可以把这个二维矩阵看成一层套一层,如上图所示,1->4->7->10->12为第零层, 13->14->15->16为第一层,所以当size=4时,总共有两层.规律如下: 可分层数为:若size为偶数,层数=size/2, 若为奇数,则层数=(size+1)/2; 第n层一个方向上的数字的数量为:size-2*n; 这是因为第零层的一个方向上数字的数量就是size, 而第一层是size-2,...第n层就是s

螺旋矩阵——正逆序

输入数字N,输出大小为N*N的螺旋矩阵 #include<iostream> using namespace std; void Spiral_Matrix1(int N,int **r){//正序输出 int k=N;int sum=1; while(k>0){ int m=(N-k)/2; int i=m,j=m; if(k==1){ //奇数情况下 r[m][m]=sum; break; } for(int n=sum;n<sum+4*(k-1);n++){ if((i==m

螺旋矩阵算法

螺旋矩阵算法是一种常用的算法,如图中排列数值: 代码如下: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> *{ padding: 0; margin: 0; } ul{ border: 1px solid black; border-bottom: n