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;
}
相关推荐
2023自学中5 小时前
C++ 内存追踪器
linux·c++
DogDaoDao9 小时前
【GitHub】 LLVM Project 深度解析:现代编译器基础设施的基石
java·c++·python·程序员·github·编译器·llvm
KuaCpp9 小时前
C++进程(下)
c++
来一碗刘肉面10 小时前
C++中的引用语法
c++·算法
杜子不疼.10 小时前
【Qt初识】工程起步:项目创建、代码解读与对象树
数据库·c++·qt
Tisfy11 小时前
LeetCode 1288.删除被覆盖区间:排序(非二重循环暴力)
算法·leetcode·题解·排序
知无不研11 小时前
算法:Fizz Buzz解题思路
c++·算法·leetcode
汉克老师11 小时前
GESP2026年6月认证C++八级( 第二部分判断题(1-10))精讲
c++·归并排序·dijkstra·二分·互斥·gesp8级·可重复组合
nianniannnn12 小时前
c++复习自存--流、异常处理、多线程与C++工程规范
开发语言·c++