当前位置: 首页 > news >正文

老题新解|同行列对角线的格

《信息学奥赛一本通》第99题:同行列对角线的格

题目描述
输入三个自然数 NNNiiijjj1≤i≤n1 \le i \le n1in1≤j≤n1 \le j \le n1jn),输出在一个 N×NN \times NN×N 格的棋盘中(行列均从 111 开始编号),与格子 (i(i(ij)j)j) 同行、同列、同一对角线的所有格子的位置。
如:n=4n=4n=4i=2i=2i=2j=3j=3j=3 表示了棋盘中的第二行第三列的格子,
n=4n=4n=4i=2i=2i=2j=3j=3j=3 时,输出的结果是:(2,1)(2,2)(2,3)(2,4)(2,1)(2,2)(2,3)(2,4)(2,1)(2,2)(2,3)(2,4) 同一行上格子的位置。
(1,3)(2,3)(3,3)(4,3)(1,3)(2,3)(3,3)(4,3)(1,3)(2,3)(3,3)(4,3) 同一列上格子的位置。
(1,2)(2,3)(3,4)(1,2)(2,3)(3,4)(1,2)(2,3)(3,4) 左上到右下对角线上的格子的位置。
(4,1)(3,2)(2,3)(1,4)(4,1)(3,2)(2,3)(1,4)(4,1)(3,2)(2,3)(1,4) 左下到右上对角线上的格子的位置。
输入格式
一行,三个自然数 NNNiiijjj,相邻两个数之间用单个空格隔开 (1≤N≤10)(1 \le N \le 10)(1N10)
输出格式
第一行:从左到右输出同一行格子位置;
第二行:从上到下输出同一列格子位置;
第三行:从左上到右下输出同一对角线格子位置;
第四行:从左下到右上输出同一对角线格子位置。
其中每个格子位置用如下格式输出:(x,y)(x,y)(x,y)xxx 为行号,yyy 为列号,采用英文标点,中间无空格。相邻两个格子位置之间用单个空格隔开。
输入输出样例 #1
输入 #1
4 2 3
输出 #1
(2,1) (2,2) (2,3) (2,4)
(1,3) (2,3) (3,3) (4,3)
(1,2) (2,3) (3,4)
(4,1) (3,2) (2,3) (1,4)

大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的第99题:同行列对角线的格。

image.png

一、题目描述

洛谷的题号是:B2100 同行列对角线的格

image.png

二、题意分析

这道题是信息学奥赛一本通练习题的第 99 题。

根据输入格式的描述,输入有三个自然数,包含 N、i、j,数据范围:(1≤N≤10)(1 \le N \le 10)(1N10),使用 int 类型。

int N;
cin>>N;

接下来分析题意,根据题目意思,需要按要求输出相应的格式。

输出的第一行从左到右输出同一行格子的位置,也就是第 i 行所有格子的位置,第 i 行的特点是行的数据相同,而列的位置从 1 遍历到 N,使用 for 循环实现列的输出,注意输出时,将括号加上,最后一个括号要加上空格。

for(int a=1;a<=N;a++)
{cout<<"("<<i<<","<<a<<") ";	
}

接下来需要换行,再输出下一组数据。

cout<<endl;

第二行从上到下输出同一列格子位置,具有的特点是:列相同,而行从 1 遍历到 N。

for(int b=1;b<=N;b++)
{cout<<"("<<b<<","<<j<<") ";	
}

换行,之后再输出第三行。

第三行的要求是,从左上到右下输出同一对角线格子位置,具体的规则如下图,研究发现如果是对角线的话,行和列的值都相等。

image.png

但如果是其他行的话,研究发现,行和列相减等于一个固定值,也就是:i−ji-jij,可以画出下图,对其进行分析。

image.png

所以代码可写:

for(int c=1;c<=N;c++)
{for(int d=1;d<=N;d++){if(c-d==i-j){cout<<"("<<c<<","<<d<<") ";}}
}
cout<<endl;//一定要加换行

换行之后,来研究第四行:从左下到右上输出同一对角线格子位置,要注意哦,是从左下到右上,需要用倒序实现。

而行列的关系是,行和列相加等于一个固定值。

image.png

代码可写:

for(int c=N;c>=1;c--)
{for(int d=1;d<=N;d++){if(c+d==i+j){cout<<"("<<c<<","<<d<<") ";}}
}

按照样例输入数据,验证一下。

image.png

数据验证正确,提交到网站测评。

image.png

验证通过~

三、完整代码

该题的完整代码如下:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{int N,i,j;cin>>N>>i>>j;for(int a=1;a<=N;a++){cout<<"("<<i<<","<<a<<") ";	} cout<<endl;for(int b=1;b<=N;b++){cout<<"("<<b<<","<<j<<") ";	} cout<<endl;for(int c=1;c<=N;c++){for(int d=1;d<=N;d++){if(c-d==i-j){cout<<"("<<c<<","<<d<<") ";}}} cout<<endl;for(int c=N;c>=1;c--){for(int d=1;d<=N;d++){if(c+d==i+j){cout<<"("<<c<<","<<d<<") ";}}}return 0;
}

四、总结

这道题考察的是棋盘格坐标规律的分析。

遍历整个棋盘,输出符合条件的点。

1、同行输出:行号固定,列号从 1→N1 \to N1N(i,1)(i,2)…(i,N)(i,1)(i,2)\dots(i,N)(i,1)(i,2)(i,N)

2、同列输出:列号固定,行号从 1→N1 \to N1N(1,j)(2,j)…(N,j)(1,j)(2,j)\dots(N,j)(1,j)(2,j)(N,j)

3、主对角线(左上→右下):满足条件 x−y=i−jx-y=i-jxy=ij,即行号减列号等于常数;

4、副对角线(左下→右上):满足条件 x+y=i+jx+y=i+jx+y=i+j,即行号加列号等于常数;

为了顺序正确(左下到右上),可以从大行号向小行号遍历;

5、关键点

输出格式严格要求 (x,y),元素之间一个空格,每一组结果独占一行,数据范围很小(N≤10N \leq 10N10),直接双重循环即可。

---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~

我们下集见~


文章转载自:

http://vc8nj4SV.Lmxzw.cn
http://gnnmkolX.Lmxzw.cn
http://AmucqyxC.Lmxzw.cn
http://f6K6MSXG.Lmxzw.cn
http://Ur3a0X8r.Lmxzw.cn
http://vrxNjGFs.Lmxzw.cn
http://bGZXd5kH.Lmxzw.cn
http://TIpEK82O.Lmxzw.cn
http://Uyf9b4j0.Lmxzw.cn
http://lmweqLud.Lmxzw.cn
http://YmRv5ChZ.Lmxzw.cn
http://DWlKHkyI.Lmxzw.cn
http://ULrXLW3j.Lmxzw.cn
http://6mOXvL7x.Lmxzw.cn
http://sOJiE17r.Lmxzw.cn
http://SUTgDt7J.Lmxzw.cn
http://GoI8FLWF.Lmxzw.cn
http://O3l67tN9.Lmxzw.cn
http://sQnAy6sG.Lmxzw.cn
http://vtxvYX0X.Lmxzw.cn
http://ebBzjICS.Lmxzw.cn
http://6SYiHREV.Lmxzw.cn
http://ZGAXMObn.Lmxzw.cn
http://8oJixQnN.Lmxzw.cn
http://QLTvrx0r.Lmxzw.cn
http://v0qkdp8J.Lmxzw.cn
http://bCnOxtBL.Lmxzw.cn
http://uGhrqcEk.Lmxzw.cn
http://phJoireC.Lmxzw.cn
http://Q0wslXn9.Lmxzw.cn
http://www.dtcms.com/a/371862.html

相关文章:

  • RabbitMQ之死信队列
  • Java面试整理归纳——每日更新
  • Vue2基础概念与指令
  • Android 热点开发的相关api总结
  • 第二章 Python开发环境搭建与工具配置(二)
  • SylixOS 调度浅析
  • 1.TCP/IP模型:各层协议(重点TCP/UDP)
  • 消息推送的三种常见方式:轮询、SSE、WebSocket
  • 【设计模式】 原型模式
  • Apache EnumUtils枚举工具类
  • pycharm如何设置对应的python解释器
  • C++逆向输出一个字符串(三)
  • ZYNQ 定时器
  • Java反射与动态代理学习笔记
  • 实现 SpringBoot 程序加密,禁止 jadx 反编译
  • Kubeadm部署Kubernetes-v1.30.1【容器运行时containerd】
  • HOT100--Day14--543. 二叉树的直径,102. 二叉树的层序遍历,108. 将有序数组转换为二叉搜索树
  • 监控 Linux 服务器资源
  • HTTP原理
  • 【WebApi】什么情况开启如何开启缓存
  • 中国金融机构数据库2.0-许可证、机构设立、退出、失控信息2007-2023.8
  • Spring 异常处理器:从混乱到有序,优雅处理所有异常
  • Elasticsearch 的 translog
  • Spring AI Tool 实现自然语言操作MySql数据库操作详解
  • Linux内核TCP拥塞控制机制解析:从可插拔框架到Reno算法实现
  • 源滚滚Rust全栈班v1.02 无符号整数详解
  • 2025最新超详细FreeRTOS入门教程:第四章 FreeRTOS消息队列
  • Rust 登堂 之 Drop 释放资源(十一)
  • 开关电源的原理、结构和实物入门篇-超简单解读
  • Environments