2025年【江苏“信息与未来”编程思维】真题及题解(T2:坐标变换)

2025年【江苏"信息与未来"编程思维】真题及题解(T2:坐标变换)

题目描述

今天我们玩的许多游戏都是真正的 3 D 3\text D 3D 游戏。在计算机能效处理三维对象之前,人们就发明了斜 45 45 45 度视角的 " 2.5 D 2.5\text D 2.5D" 游戏,不需要额外的 3 D 3\text D 3D 加速硬件也能流畅运行。

2.5 D 2.5\text D 2.5D 游戏的地图是一个 n n n 行、 m m m 列的网格。我们首先将网格里的格子按照从上到下、从左到右的顺序从 1 1 1 开始编号,再把网格顺时针 (向右) 旋转 45 45 45 度,就得到了游戏的地图。此时,网格的行和列发生了变化:旋转后最顶部的格子位于第一行;最左侧的格子位于第一列,如下图所示:

Dr. X 希望实现自己的 2.5 D 2.5\text D 2.5D 游戏引擎,他希望你计算 n n n 行 m m m 列网格中,编号为 k k k 的格子,在旋转 45 45 45 度后的新网格中的行和列。

输入格式

输入空格分隔的整数 n , m n, m n,m 和 k k k,分别表示网格的行数、列数和格子的编号。

输出格式

输出空格分隔的整数 x , y x, y x,y,表示编号为 k k k 的格子在旋转 45 45 45 度后的新网格中的坐标。

输入输出样例 1
输入 1
复制代码
4 3 7
输出 1
复制代码
3 2
输入输出样例 2
输入 2
复制代码
16 16 233
输出 2
复制代码
23 10
说明/提示

对于 60 % 60\% 60% 的数据, n , m ≤ 100 n, m \le 100 n,m≤100。

对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 32768 , 1 ≤ k ≤ n × m 1 \le n, m \le 32768, 1 \le k \le n \times m 1≤n,m≤32768,1≤k≤n×m。

思路分析

题目给出一个 n 行 m 列的网格,格子按行优先从 1 开始编号。已知编号 k,先还原它在原网格中的行 i 和列 j:

  • 行: i = ( k − 1 ) / m + 1 i = (k-1) / m + 1 i=(k−1)/m+1(整除)
  • 列: j = ( k − 1 ) % m + 1 j = (k-1) \% m + 1 j=(k−1)%m+1(取余)

将原网格顺时针旋转 45 ∘ 45^\circ 45∘ 后,新坐标满足:

  • 新行:(x = i + j - 1)(最顶部的格子行号最小)
  • 新列:(y = n + j - i)(最左侧的格子列号最小)

代码实现

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, k;
    cin >> n >> m >> k;  
    int i = (k - 1) / m + 1; //原行
    int j = (k - 1) % m + 1; //原列
    int x = i + j - 1; //旋转后行
    int y = n + j - i; //旋转后列
    cout << x << " " << y ;   
    return 0;
}

功能分析

  • 输入三个整数 (n,m,k),分别表示网格行数、列数和目标格子的编号。
  • 通过整数除法和取模运算,将一维编号还原为二维原坐标。
  • 利用旋转 45 ∘ 45^\circ 45∘ 的坐标变换公式,直接计算出新网格中的行号和列号。
  • 输出两个整数,即旋转后的坐标。

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:

https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:

https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:

https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:

https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
拳里剑气11 小时前
C++算法:多源BFS
c++·算法·宽度优先·多源bfs
ysa05103012 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
aramae14 小时前
C++ IO流完全指南:从C标准库到C++流式编程
服务器·c语言·开发语言·c++·后端
_wyt00115 小时前
c++里的族谱:树
c++·
@三十一Y15 小时前
C++:AVL树实现
c++
haolin123.16 小时前
类和对象(上)
开发语言·c++
ShineWinsu16 小时前
对于Linux:传输层协议UDP原理的解析
linux·c++·面试·udp·协议·传输层·计算机系统
LingzhiPi16 小时前
零知派ESP32--AS5600磁吸旋钮音量控制器
c++·单片机·嵌入式硬件
小保CPP16 小时前
OpenCV C++车型识别1-图像预处理
c++·人工智能·opencv·计算机视觉
库克克17 小时前
【C++】C++11 包装器function 与 绑定器 bind
开发语言·c++