【题目链接】

OpenJudge NOI 1.8 24:蛇形填充数组

【题目考点】

1. 二维数组

【解题思路】

解法1:移动焦点

设焦点位置,焦点移动同时为焦点位置赋值。焦点移动规则为:

  • 移动到右上角时,行加1
  • 移动到左下角时,列加1
  • 移动到第一行或第n行时,列加1
  • 移动到第一列或第n列时,行加1

不断移动焦点,填充整个矩阵,最后输出矩阵。

解法2:遍历矩阵

下标从1开始,每条右上左下斜线上的位置的行列坐标加和是一定的,第一条斜线的加和为2,第二条为3,。。。,最后一条即第2n-1条斜线加和为2n。每次遍历整个矩阵,为一条斜线赋值。
观察规律可知:

  • 斜线编号为奇数的斜线,数字是从左下向右上填充的,行减少列增加。
  • 斜线编号为偶数的斜线,数字是从右上向左下填充的,行增加列减少。

每次填充一条斜线,填充整个矩阵,最后输出矩阵。

【题解代码】

解法1:移动焦点

#include<bits/stdc++.h>
using namespace std;
int dir[2][2]={{-1,1},{1,-1}};//两种方向:右上、左下
int a[15][15];
int main()
{int k = 1, n, i, j, d = 0, si, sj;//(si,sj):拟定的下一个位置 cin >> n;i = j = 1;while(k <= n*n){a[i][j] = k++;si = i + dir[d][0], sj = j + dir[d][1];if(si < 1 || si > n || sj < 1 || sj > n)//如果下一个位置移出了边界 {   d = (d+1)%2;//改变移动方向 if(i == 1 && j == n)//如果是右上角,则到下一行 i++;else if(i == n && j == 1)//如果是在左下角,则到下一列 j++;else if(i == 1 || i == n)//如果在第一行或最后一行,到下一列 j++;else if(j == 1 || j == n)//如果在第一列或最后一列,到下一行 i++;}elsei += dir[d][0],  j += dir[d][1];}for(int i = 1; i <= n; ++i){for(int j = 1; j <= n; ++j)cout << a[i][j] << ' ';cout << endl;}return 0;
}

解法2:遍历矩阵

#include <bits/stdc++.h>
using namespace std;
int a[15][15];
int main(){int n, k = 1;cin >> n;for(int m = 1; m <= 2*n-1; m++)//m为斜线编号,即每条斜线的行列坐标加和减1 {if(m%2 == 0)//斜线编号为偶数的斜线,数字是从右上向左下填充的,行增加列减少。{for(int i = 1; i <= n; i++)for(int j = n; j >= 1; j--)if(i + j == m + 1)//第m条斜线的行列坐标加和为m+1 a[i][j] = k++;}else//斜线编号为奇数的斜线,数字是从左下向右上填充的,行减少列增加。{for(int i = n; i >= 1; --i)for(int j = 1; j <= n; ++j)if(i + j == m + 1)a[i][j] = k++;    }}for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++)cout << a[i][j] << ' ';cout << endl;}return 0;
}

OpenJudge NOI 1.8 24:蛇形填充数组相关推荐

  1. openjudge 1.8.24 蛇形填充数组

    OpenJudge - 24:蛇形填充数组 解题思路: 1.由题可得,输入一个数n,然后构建乘n*n的方阵,将1-n*n的数按照蛇形的方式填入二维数组 2.首先,面对这种题,一定要手动演算一遍会发现遍 ...

  2. 信息学奥赛一本通 1076:正常血压 | OpenJudge NOI 1.5 24:正常血压

    [题目链接] ybt 1076:正常血压 OpenJudge NOI 1.5 24:正常血压 [题目考点] 1. 循环统计连续处于某种状态的次数 例: 输入一个由英文数字组成的字符串,求其中最多连续出 ...

  3. c语言蛇形填充数组,蛇形

    题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 请注意本题含有多组样 ...

  4. 【OpenJudge NOI】题解目录

    [OpenJudge NOI]题解目录 OJ链接:OpenJudge NOI 以下为本人做的OJ题解 针对每一道题我都会给出题目考点.解题思路.题解代码.必要时也会给出不同的解题方法. 如有不足之处, ...

  5. OpenJudge NOI 1.8 25:螺旋加密

    [题目链接] OpenJudge NOI 1.8 25:螺旋加密 [题目考点] 1. 进制转换 2. 二维数组 [解题思路] 先cin整型变量读入行列数r与c,再用cin.get()或getchar( ...

  6. 信息学奥赛一本通 1105:数组逆序重存放 | OpenJudge NOI 1.6 04

    [题目链接] ybt 1105:数组逆序重存放 OpenJudge NOI 1.6 04:数组逆序重放 [题目考点] 1. 数组 数组有两种存储方式 将数组存储在下标为0 ~ n-1的位置 将数组存在 ...

  7. 信息学奥赛一本通 1848:【07NOIP提高组】字符串的展开 | OpenJudge NOI 1.7 35:字符串的展开 | 洛谷 P1098 [NOIP2007 提高组] 字符串的展开

    [题目链接] ybt 1848:[07NOIP提高组]字符串的展开 OpenJudge NOI 1.7 35:字符串的展开 洛谷 P1098 [NOIP2007 提高组] 字符串的展开 [题目考点] ...

  8. 信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序

    [题目链接] ybt 1181:整数奇偶排序 OpenJudge NOI 1.10 06:整数奇偶排序 [题目考点] 1. 排序 [君义精讲]排序算法 [解题思路] 解法1:将奇数和偶数分开,分别排序 ...

  9. OpenJudge NOI 1.9 10:找最大数序列

    [题目链接] OpenJudge NOI 1.9 10:找最大数序列 [题目考点] 1. 求最值 2. 数组填充 int a[105], ai = 0 待填充数据x,填充方法有两种 填充到下标1~ai ...

最新文章

  1. 获取rawimage的像素点函数_光场相机数据二次开发基础-使用LFtoolbox解码lfp文件
  2. 韩国FPS新网游《火海逃生》新增内容
  3. 终于收到微软的衬衫了!!!
  4. VC6生成和调用lib
  5. mysql读书笔记----时间函数
  6. 使用Spring Integration进行消息处理
  7. uln2003驱动蜂鸣器_让蜂鸣器发声
  8. 6000字讲透!特适合产品新人的成长指南(附成长路径图)
  9. wamp xampp mysql端口冲突,xampp安装后apache 80端口被占用的解决方法
  10. Eclipse插件Mylyn管理上下文任务管理
  11. 有备无患:避免文件丢失的可行方案
  12. 第三届泰迪杯数据挖掘技能赛一等奖总结经验分享
  13. [Android移动安全渗透基础教程] 模拟器篇
  14. 怎么在国内创建谷歌账号_如何在Google表格中创建下拉列表
  15. 基于Python热点新闻关键词数据分析系统
  16. Python中面向对象(学习笔记)
  17. CDH5.15离线搭建简易版集群(完整版)
  18. 愚见——工大之软件工程
  19. 串口的TXD、RXD、GND分别是什么意思?
  20. 7-6 水仙花数 (20分)

热门文章

  1. python实现简易聊天需要登录博客园zip下载_Python基于Socket实现简易多人聊天室的示例代码...
  2. 实战干货!Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权!
  3. 别再面向 for 循环编程了,JDK 自带的观察者模式就很香!
  4. IDEA这样配置注释模板,让你高出一个逼格!!
  5. 骚操作!他居然同时给谷歌和 Facebook 上班干活
  6. 金融资讯数据服务平台建设实践
  7. 【发布】JEECG-P3 新主题后台风格(H5扁平化)
  8. 建立和使用Maven项目骨架Archetype
  9. 如何关闭hibernate产生的大量日志
  10. 关于解决service 'sapdp00' not found的办法