OpenJudge NOI 1.8 24:蛇形填充数组
【题目链接】
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:蛇形填充数组相关推荐
- openjudge 1.8.24 蛇形填充数组
OpenJudge - 24:蛇形填充数组 解题思路: 1.由题可得,输入一个数n,然后构建乘n*n的方阵,将1-n*n的数按照蛇形的方式填入二维数组 2.首先,面对这种题,一定要手动演算一遍会发现遍 ...
- 信息学奥赛一本通 1076:正常血压 | OpenJudge NOI 1.5 24:正常血压
[题目链接] ybt 1076:正常血压 OpenJudge NOI 1.5 24:正常血压 [题目考点] 1. 循环统计连续处于某种状态的次数 例: 输入一个由英文数字组成的字符串,求其中最多连续出 ...
- c语言蛇形填充数组,蛇形
题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 请注意本题含有多组样 ...
- 【OpenJudge NOI】题解目录
[OpenJudge NOI]题解目录 OJ链接:OpenJudge NOI 以下为本人做的OJ题解 针对每一道题我都会给出题目考点.解题思路.题解代码.必要时也会给出不同的解题方法. 如有不足之处, ...
- OpenJudge NOI 1.8 25:螺旋加密
[题目链接] OpenJudge NOI 1.8 25:螺旋加密 [题目考点] 1. 进制转换 2. 二维数组 [解题思路] 先cin整型变量读入行列数r与c,再用cin.get()或getchar( ...
- 信息学奥赛一本通 1105:数组逆序重存放 | OpenJudge NOI 1.6 04
[题目链接] ybt 1105:数组逆序重存放 OpenJudge NOI 1.6 04:数组逆序重放 [题目考点] 1. 数组 数组有两种存储方式 将数组存储在下标为0 ~ n-1的位置 将数组存在 ...
- 信息学奥赛一本通 1848:【07NOIP提高组】字符串的展开 | OpenJudge NOI 1.7 35:字符串的展开 | 洛谷 P1098 [NOIP2007 提高组] 字符串的展开
[题目链接] ybt 1848:[07NOIP提高组]字符串的展开 OpenJudge NOI 1.7 35:字符串的展开 洛谷 P1098 [NOIP2007 提高组] 字符串的展开 [题目考点] ...
- 信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序
[题目链接] ybt 1181:整数奇偶排序 OpenJudge NOI 1.10 06:整数奇偶排序 [题目考点] 1. 排序 [君义精讲]排序算法 [解题思路] 解法1:将奇数和偶数分开,分别排序 ...
- OpenJudge NOI 1.9 10:找最大数序列
[题目链接] OpenJudge NOI 1.9 10:找最大数序列 [题目考点] 1. 求最值 2. 数组填充 int a[105], ai = 0 待填充数据x,填充方法有两种 填充到下标1~ai ...
最新文章
- 获取rawimage的像素点函数_光场相机数据二次开发基础-使用LFtoolbox解码lfp文件
- 韩国FPS新网游《火海逃生》新增内容
- 终于收到微软的衬衫了!!!
- VC6生成和调用lib
- mysql读书笔记----时间函数
- 使用Spring Integration进行消息处理
- uln2003驱动蜂鸣器_让蜂鸣器发声
- 6000字讲透!特适合产品新人的成长指南(附成长路径图)
- wamp xampp mysql端口冲突,xampp安装后apache 80端口被占用的解决方法
- Eclipse插件Mylyn管理上下文任务管理
- 有备无患:避免文件丢失的可行方案
- 第三届泰迪杯数据挖掘技能赛一等奖总结经验分享
- [Android移动安全渗透基础教程] 模拟器篇
- 怎么在国内创建谷歌账号_如何在Google表格中创建下拉列表
- 基于Python热点新闻关键词数据分析系统
- Python中面向对象(学习笔记)
- CDH5.15离线搭建简易版集群(完整版)
- 愚见——工大之软件工程
- 串口的TXD、RXD、GND分别是什么意思?
- 7-6 水仙花数 (20分)
热门文章
- python实现简易聊天需要登录博客园zip下载_Python基于Socket实现简易多人聊天室的示例代码...
- 实战干货!Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权!
- 别再面向 for 循环编程了,JDK 自带的观察者模式就很香!
- IDEA这样配置注释模板,让你高出一个逼格!!
- 骚操作!他居然同时给谷歌和 Facebook 上班干活
- 金融资讯数据服务平台建设实践
- 【发布】JEECG-P3 新主题后台风格(H5扁平化)
- 建立和使用Maven项目骨架Archetype
- 如何关闭hibernate产生的大量日志
- 关于解决service 'sapdp00' not found的办法