蛇形填 数

简介:
蛇形填数
时间限制:3000 ms | 内存限制:65535 KB
难度:3

描述
在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

细心的朋友可以发现一个特点,

要填 数,其实就是一圈一圈的填 数,

一圈就是4个循环,分别处理右列,下行,左列,上行。

好像是一个漩涡似的。

代码如下:

#include <iostream>
#include <cstring>
using namespace std;
#define MAX_SIZE 100

int main()
{
    int n;
    cin >> n;//n * n方阵

    int pn[MAX_SIZE][MAX_SIZE];
    int row =-1, col = n-1;
    memset(pn, 0, sizeof(pn));
    int count = 1;
    while (count <= n * n)
    {
        while (row < n-1 && pn[row+1][col] == 0) pn[++row][col] = count++;
        while (col >= 1 && pn[row][col-1] == 0) pn[row][--col] = count++;
        while (row >= 1 && pn[row-1][col] == 0) pn[--row][col] = count++;
        while (col < n-1 && pn[row][col+1] == 0) pn[row][++col] = count++;
        //cout <<"count=" << count << endl;
    }

    for (int i = 0; i < n; i++)
    {
         for (int j = 0; j < n; j++)
             cout << pn[i][j] << " ";
         cout << endl;
    }

    return 0;
}



目录
相关文章
|
2月前
|
前端开发 JavaScript 安全
前端JS实现密码校验键盘横竖、26字母、相同字母、相同数字、密码包含用户名、数字 字母不能连续 不能相同三个、不能横向 竖向 连续三个 包含字符、不能有中文符号
该 JavaScript 代码实现了一个严格的密码校验功能,确保密码满足多种安全要求,包括长度、字符类型、不包含中文及特殊字符、不与用户名相似等。通过多个辅助函数,如 `validateFormat` 检查密码格式,`isHasChinaCharFun` 检测中文符号,`getCharAll` 生成键盘组合,以及 `checkPasswordFun` 综合验证密码的有效性和安全性。此工具对于提高用户账户的安全性非常有用。
50 0
|
6月前
|
C语言
C语言-----多组输入,一个整数(1~100),表示线段长度,即“*”的数量
C语言-----多组输入,一个整数(1~100),表示线段长度,即“*”的数量
|
7月前
【错题集-编程题】包含不超过两种字符的最长字串(滑动窗口)
【错题集-编程题】包含不超过两种字符的最长字串(滑动窗口)
每日三题-电话号码的字母组合、字母异位词分组、找到所有数组中消失的数字
每日三题 电话号码的字母组合 字母异位词分组 找到所有数组中消失的数字
112 4
每日三题-电话号码的字母组合、字母异位词分组、找到所有数组中消失的数字
|
索引
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
134 0
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。
多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。
144 0
多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。
Day25——组合总和III、电话号码的字母组合
Day25——组合总和III、电话号码的字母组合
89 0
输入7个整数(0-100),代表7个整数,用空格隔开.小数点后保留两位小数,每行输入后换行.去掉一个最高分一个最低分,输出每组的平均分.用一个循环完成(7个面试官问题)
输入7个整数(0-100),代表7个整数,用空格隔开.小数点后保留两位小数,每行输入后换行.去掉一个最高分一个最低分,输出每组的平均分.用一个循环完成(7个面试官问题)
172 0
输入7个整数(0-100),代表7个整数,用空格隔开.小数点后保留两位小数,每行输入后换行.去掉一个最高分一个最低分,输出每组的平均分.用一个循环完成(7个面试官问题)
有一个长度是10的数组,数组内有10个人名,要求去掉重复的人名,并输出
有一个长度是10的数组,数组内有10个人名,要求去掉重复的人名,并输出
320 0
|
机器学习/深度学习 CDN
编写程序统计从键盘输入的一行文本中各个字母的个数。 输入以回车键结束。 不区分大小写,大写字母与相应的小写字母按照同一个字母看待。 要求输出按照各个字母出现的个数从大到小进行排序,出现的个数相同的,按
编写程序统计从键盘输入的一行文本中各个字母的个数。 输入以回车键结束。 不区分大小写,大写字母与相应的小写字母按照同一个字母看待。 要求输出按照各个字母出现的个数从大到小进行排序,出现的个数相同的,按
379 0