问题链接:CCF NOI1046 打印方阵



时间限制: 1000 ms  空间限制: 262144 KB

题目描述

打印一个n*n的数字方阵,例如n=4时:(n<=100)
1  3    4   10
2  5    9   11
6  8    12   15
7  13   14   16

输入

输入n。

输出

输出n*n的方阵。

样例输入

4
样例输出

1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16

数据范围限制



问题分析

这个问题是要将1-n*n的数,按照一定规律(原题没有详细说明,只是给出了一个样例)填入n*n的矩阵中。这个规律需要自己看出来。

这个问题的关键是,如何1-n*n的数与二维下标的映射关系,找出规律问题就简单了。

程序说明

这里除了给出上述思路的C语言程序外,另外给出一个其他思路的C++语言程序,逻辑上更加易懂。

要点详解

  • 虽然题意中给的是常量的矩阵大小,可以用字符常量来定义数组,但是用宏来定义一个符号常量更为合理。
  • 1-n*n的数与二维下标的映射关系。一些映射关系用数学函数表达是困难的,而用程序来描述并不困难。
  • 矩阵是数学上的概念,二维数组是程序中的概念。编写程序时,矩阵可以用二维数组来存储和表示。

参考链接:CCF201412-2 Z字形扫描(100分) 。


100分通过的C语言程序:

#include <stdio.h>#define N 100int a[N][N];int main(void)
{int n, i, j, val, n1;// 输入nscanf("%d", &n);// 设置左上三角的值val = 1;for(i=0; i<n; i++)for(j=0; j<=i; j++) {if(i % 2)a[i - j][j] = val;elsea[j][i - j] = val;val++;}// 设置右下三角的值val = n * n;n1 = n - 1;for(i=0; i<n1; i++)for(j=0; j<=i; j++) {if(i % 2)a[n1 - i + j][n1 - j] = val;elsea[n1 - j][n1 - i + j] = val;val--;}// 输出结果for(i=0; i<n; i++) {for(j=0; j<n; j++)printf("%d ", a[i][j]);printf("\n");}return 0;
}

100分通过的C++语言程序:

#include <iostream>using namespace std;const int SOUTH = 0;
const int EAST = 1;
const int SOUTHEAST = 2;
const int NORTHWEST = 3;struct {int drow;int dcol;
} direct[] = { { 1, 0 }, { 0, 1 }, { -1, 1 }, { 1, -1 } };const int N = 100;int a[N][N];int main()
{int n, val=1;cin >> n;// Z字形输出结果int row = 0, col = 0, next = SOUTH;a[row][col] = val;while (row != n - 1 || col != n - 1) {val++;row += direct[next].drow;col += direct[next].dcol;a[row][col] = val;if (next == SOUTH && col == 0)next = SOUTHEAST;else if (next == SOUTH && col == n - 1)next = NORTHWEST;else if (next == EAST && row == 0)next = NORTHWEST;else if (next == EAST && row== n - 1)next = SOUTHEAST;else if (next == SOUTHEAST && col == n - 1)next = SOUTH;else if (next == SOUTHEAST && row == 0)next = EAST;else if (next == SOUTHEAST&& row != 0)next = SOUTHEAST;else if (next == NORTHWEST && row == n - 1)next = EAST;else if (next == NORTHWEST&& col !=0)next = NORTHWEST;else if (next == NORTHWEST && col== 0)next = SOUTH;}for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++)cout << a[i][j] << " ";cout << endl;}return 0;
}

CCF NOI1046 打印方阵相关推荐

  1. Contest3117 - 2021级新生个人训练赛第24场_问题 E: 打印方阵

    问题 E: 打印方阵 时间限制: 1.000 Sec 内存限制: 128 MB题目描述 下面这样的方阵很有规律,称为蛇形方阵.例如3*3的: 1 2 3 6 5 4 7 8 9 现在给定边长,输出相应 ...

  2. CCF201412-2 Z字形扫描(解法二)(100分)

    试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...

  3. CCF201412-2 Z字形扫描(解法二)(100分)【废除!!!】

    试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...

  4. CCF201412-2 Z字形扫描(100分)

    试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...

  5. 编程,打印n*n(n<10)的螺旋方阵。

    该文针对C++数组初学者,本篇主要运用二维数组以及循环,条件语句的知识来解决问题. 目录 1.题目 2.思路 3.完整代码 题目: 编程,打印n*n(n<10)的螺旋方阵. 思路: 首先对螺旋方 ...

  6. python从文件中读取数据_Python3 中把txt数据文件读入到矩阵中的方法

    下面为大家分享一篇Python3 中把txt数据文件读入到矩阵中的方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 1.实例程序: ''' 数据文件:2.txt内容:(以空格分开每个数据) ...

  7. python以垂直方式输出_python学习笔记

    Author: maddock Date: 2015-03-15 21:42:01 (暂时没有整理) python json文件处理 #coding:utf-8 importjson#data = [ ...

  8. c 语言矩阵求逆算法,矩阵的逆 C 语言 算法一

    #include #include voidmain() {inti,j;intdimension;double deterValue=1;double **array,**deterArray, * ...

  9. BUPT计导第三次机考12.8数组+二分答案详解

    坐标:BUPT:OJ:Excited OJ %%%AK大佬,感觉这次AK的人均OI选手-- 还是刷题不够Orzzzz A.阿尔法乘积 注意题目要求:非零的数相乘 注意数据范围:应为long long而 ...

最新文章

  1. 卷积神经网络(CNN)新手指南
  2. Linux开关机时长查看
  3. java写左侧导航栏界面,jQuery----左侧导航栏面板切换实现
  4. potential things for recommendation
  5. 自反访问控制列表(ACL)
  6. NOIP模拟测试9「随·单·题」
  7. mysql5.6 load_MySQL 5.6 dump/load buffer pool实验
  8. bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string
  9. 关于求XXX.class.getResource(xxx).getPath()的用法
  10. Bailian4101 晶矿的个数【DFS】
  11. TMS320C55x的寄存器
  12. linux screen会话命令
  13. 【Excel】设置自定义单元格格式
  14. 西普CTF训练(programe部分分析)
  15. win7系统无法正常启动
  16. 个人博客系统中的评论功能设计
  17. Windows xp 定时关机命令 [转贴]
  18. IDEA使用破解补丁永久激活
  19. JavaScript实现涂鸦笔
  20. 作业Android自我介绍

热门文章

  1. dojo的TabContainer竖排摆放tab标签
  2. AR+LBS街景实景红包PokemonGo游戏捉妖夺宝营销解决方案定制开发暨百度高德地图Unity插件SDK
  3. 页游中的十大经典游戏题材
  4. 在Linux上安装Mysql 以及 涉及问题
  5. Spark重要概念提出时间戳和原因
  6. linux安装mysql5.6rpm_centos6.5 下安装mysql5.6,rpm方式
  7. 修改云服务器上文件夹只读属性,求助:为什么我电脑里的文件夹会自动变为只读属性?...
  8. LeetCode 144. 二叉树的前序遍历(递归)(迭代)(颜色标记法)
  9. LeetCode 120. 三角形最小路径和(动态规划)
  10. 海思3519A配置NFS文件系统(永久)