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.从前有座山相关推荐

  1. 1021. 从前有座山

    Description 从前有座山,山的俯视图是一个n×n 的矩形,(1,1)位置海拔最低为1 ,然后海拔沿环形依次升高. 给定n的值,输出这座山的海拔高度图. Input Format 输入仅有一行 ...

  2. 上海交大OJ 从前有座山

    1021. 从前有座山 Description 从前有座山,山的俯视图是一个n×n n×n 的矩形,(1,1) (1,1) 位置海拔最低为1 1 ,然后海拔沿环形依次升高. 给定n的值,输出这座山的海 ...

  3. 51nod 1021 石头归并

    1021 石子归并 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合 ...

  4. PAT-乙级-1021. 个位数统计 (15)

    1021. 个位数统计 (15) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个k位整数N = dk-1 ...

  5. VMware workstation 7.1 安装错误提示1021解决方法

    前些日子安装了VMware 7.1是用注册机获得的注册码,但是今天突然想用的时候,让俺重新输入注册码,哎···无语了··重新用注册机获取注册码输入,还是不管用··很无奈··打算重新安装·····    ...

  6. PAT甲级1021 Deepest Root :[C++题解]树的最大深度、并查集、dfs求树的深度

    文章目录 题目分析 题目链接 题目分析 分析: 考察知识点:并查集.dfs.树的深度 给定n个结点,n-1条边,只要能保证只有1个连通分量,就是一棵树.否则的话就不是树,它是不连通的. 用并查集来看是 ...

  7. Codevs 1021 玛丽卡

    Codevs 1021 玛丽卡 题目地址:http://codevs.cn/problem/1021/ 题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他 ...

  8. 1021. Deepest Root (25)

    题目链接:http://www.patest.cn/contests/pat-a-practise/1021 题目: 1021. Deepest Root (25) 时间限制 1500 ms 内存限制 ...

  9. 飞船赛——FOJ 1021

    题目:http://acm.fzu.edu.cn/problem.php?pid=1021 分析:被超车:起始比"我"落后,速度却比"我"快.由于起步位置按从小 ...

最新文章

  1. 图灵今年的生日礼物,是新版50英镑纸币
  2. 一个时代的结束:微软盖茨的人生掠影(组图)
  3. Acwing第 4 场周赛【未完结】
  4. 吉长江:基于学习的视频植入技术是未来趋势
  5. petapoco mysql_PetaPocoEfCoreMvc[持续更新]欢迎在github上star
  6. InstallShield 2012 Spring新功能试用(12): Suite/Advanced UI 和 Advanced UI 工程支持InstallScript安装程序(Part 1)...
  7. UniCode 常用字符大全
  8. VUE和Element-UI下拉框select实现拼音,中文搜索
  9. 有向图邻接矩阵幂的意义
  10. iOS 获取设备类型和系统信息
  11. http://zaojiasys.jianshe99.com 建造师数据泄漏,可以查看全部所有人的信息!
  12. 海外对冲基金大鳄核心策略
  13. 5寸android智能手机,5寸刚入门 六款巨屏安卓智能手机盘点
  14. 【react】createElement实例
  15. Gram矩阵与卷积网络中的卷积的直观理解
  16. HMS Core-IAP特性功能之卡券服务
  17. 最强 IDE Visual Studio 2017 正式版发布-gt;最快更高效-终于等到你
  18. 南方周末:史玉柱脑白金式网游重建巨人(转载)
  19. 古琴销售怎么做阳php学,学奏古琴,学斫古琴,开班传艺 一位越南博士的琴色人生...
  20. 301 Moved Permanently解决

热门文章

  1. 人类传说中的吸血鬼种族的由来与发展
  2. 移动端IM系统的协议选型:UDP还是TCP?
  3. XP下将笔记本无线网卡设置为路由
  4. idea设置关键字颜色_IntelliJ IDEA如何配置颜色与字体
  5. 拉黑技巧/幻隐网络科技
  6. 完整记录一下Web前端直传阿里OSS大文件+采用后端临时授权传stsToken的方式
  7. 使用证据积累进行聚类算法集成
  8. 12.5.2 升12.5.3的补丁 linux下载,[2019.12.05] Kindle 阅读器固件升级至 5.12.3
  9. 微信小程序引入iview weapp
  10. 关于Membership 类