1021.从前有座山
Description
从前有座山,山的俯视图是一个n×n的矩形,(1,1)位置海拔最低为1,然后海拔沿环形依次升高。
给定n的值,输出这座山的海拔高度图。
Input Format
输入仅有一行,为一个正整数n。
Output Format
输出为这座山的海拔高度图。
Sample Input
4
Sample Output
1 2 3 412 13 14 511 16 15 610 9 8 7
题源上交acm,地址http://acm.sjtu.edu.cn/OnlineJudge/problem/1021
google了一下,网上现有的做法似乎都没有我的好,所以把我的做法贴出来^_^
基本的思路是开辟一个n * n的矩阵,填上表示高度的数字,再输出这个矩阵。
问题在于如何填上正确的数字。
以 n = 5 为例子,观察最外圈的数字,将其分为4个部分,如图
显然,每个部分都可以用一个循环来填充数字。不失一般的,填充一整圈的伪代码为:
for i = 1 .. N-1
map[1][i] = i
map[i][N] = N - 1 + i
map[N][N - i] = 2 * (N - 1) + i
map[N - i][1]= 3 * (N - 1) + i
对于非最外圈而言,记录下起始填充位置的偏移量(包括x轴偏移,y轴偏移,填充数字偏移)即可。
最后,对于奇数边长矩阵,需要在矩阵的中心点填上高度的最大值,也就是边长的平方。
#include <iostream>
#include <iomanip>
#include <string.h>using namespace std;int main(){int i, j;int n;int *map;cin >> n;map = new int[n * n];memset(map, 0, sizeof(map));int h_offset = 1;int x_offset = 0;int y_offset = 0;for (int len = n - 1; len > 0; len-= 2){ //a loop fills a circle, from outer to innerfor (i = 0; i < len; ++i){map[x_offset * n + (y_offset + i)] = h_offset + i;map[(x_offset + i) * n + (n - 1 - y_offset)] = h_offset + len + i;map[(n - 1 - x_offset) * n + (n - 1 - y_offset - i)] = h_offset + 2 * len + i;map[(n - 1 - x_offset - i) * n + (y_offset)] = h_offset + 3 * len + i;}h_offset += 4 * len;x_offset ++;y_offset ++;}if(n % 2 == 1)map[n * n / 2] = n * n;for (i = 0; i < n; ++i){for (j = 0; j < n; ++j){cout << setw(6) << map[i * n + j];}cout << endl;}delete []map;return 0;
}
转载于:https://www.cnblogs.com/vhisp/p/3953311.html
1021.从前有座山相关推荐
- 1021. 从前有座山
Description 从前有座山,山的俯视图是一个n×n 的矩形,(1,1)位置海拔最低为1 ,然后海拔沿环形依次升高. 给定n的值,输出这座山的海拔高度图. Input Format 输入仅有一行 ...
- 上海交大OJ 从前有座山
1021. 从前有座山 Description 从前有座山,山的俯视图是一个n×n n×n 的矩形,(1,1) (1,1) 位置海拔最低为1 1 ,然后海拔沿环形依次升高. 给定n的值,输出这座山的海 ...
- 51nod 1021 石头归并
1021 石子归并 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合 ...
- PAT-乙级-1021. 个位数统计 (15)
1021. 个位数统计 (15) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个k位整数N = dk-1 ...
- VMware workstation 7.1 安装错误提示1021解决方法
前些日子安装了VMware 7.1是用注册机获得的注册码,但是今天突然想用的时候,让俺重新输入注册码,哎···无语了··重新用注册机获取注册码输入,还是不管用··很无奈··打算重新安装····· ...
- PAT甲级1021 Deepest Root :[C++题解]树的最大深度、并查集、dfs求树的深度
文章目录 题目分析 题目链接 题目分析 分析: 考察知识点:并查集.dfs.树的深度 给定n个结点,n-1条边,只要能保证只有1个连通分量,就是一棵树.否则的话就不是树,它是不连通的. 用并查集来看是 ...
- Codevs 1021 玛丽卡
Codevs 1021 玛丽卡 题目地址:http://codevs.cn/problem/1021/ 题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他 ...
- 1021. Deepest Root (25)
题目链接:http://www.patest.cn/contests/pat-a-practise/1021 题目: 1021. Deepest Root (25) 时间限制 1500 ms 内存限制 ...
- 飞船赛——FOJ 1021
题目:http://acm.fzu.edu.cn/problem.php?pid=1021 分析:被超车:起始比"我"落后,速度却比"我"快.由于起步位置按从小 ...
最新文章
- 图灵今年的生日礼物,是新版50英镑纸币
- 一个时代的结束:微软盖茨的人生掠影(组图)
- Acwing第 4 场周赛【未完结】
- 吉长江:基于学习的视频植入技术是未来趋势
- petapoco mysql_PetaPocoEfCoreMvc[持续更新]欢迎在github上star
- InstallShield 2012 Spring新功能试用(12): Suite/Advanced UI 和 Advanced UI 工程支持InstallScript安装程序(Part 1)...
- UniCode 常用字符大全
- VUE和Element-UI下拉框select实现拼音,中文搜索
- 有向图邻接矩阵幂的意义
- iOS 获取设备类型和系统信息
- http://zaojiasys.jianshe99.com 建造师数据泄漏,可以查看全部所有人的信息!
- 海外对冲基金大鳄核心策略
- 5寸android智能手机,5寸刚入门 六款巨屏安卓智能手机盘点
- 【react】createElement实例
- Gram矩阵与卷积网络中的卷积的直观理解
- HMS Core-IAP特性功能之卡券服务
- 最强 IDE Visual Studio 2017 正式版发布-gt;最快更高效-终于等到你
- 南方周末:史玉柱脑白金式网游重建巨人(转载)
- 古琴销售怎么做阳php学,学奏古琴,学斫古琴,开班传艺 一位越南博士的琴色人生...
- 301 Moved Permanently解决
热门文章
- 人类传说中的吸血鬼种族的由来与发展
- 移动端IM系统的协议选型:UDP还是TCP?
- XP下将笔记本无线网卡设置为路由
- idea设置关键字颜色_IntelliJ IDEA如何配置颜色与字体
- 拉黑技巧/幻隐网络科技
- 完整记录一下Web前端直传阿里OSS大文件+采用后端临时授权传stsToken的方式
- 使用证据积累进行聚类算法集成
- 12.5.2 升12.5.3的补丁 linux下载,[2019.12.05] Kindle 阅读器固件升级至 5.12.3
- 微信小程序引入iview weapp
- 关于Membership 类