平面上有一个矩形,大小为n×m,其中,长度为n的边是竖直的,长度为m的边是水平的。将矩形切割成n×m个小正方形,规定左上角的小正方形坐标为,左下角的小正方形坐标为,右上角的小正方形坐标为,右下角的小正方形坐标为。从上往下数第x行,从左往右数第列的小正方形坐标为(x,y). 现在,我们对这个矩形进行如下操作,将其顺时针旋转90度x次,然后将其水平翻转y次,然后将其逆时针旋转90度z次。 接着,我们将这个操作后的矩形重新标上坐标,每一个小正方形就有一个原来的坐标和新的坐标。 然后有Q个询问,每一次询问一个原来坐标为的小正方形的新坐标。你需要对所有询问作出回答。-笔试面试资料

这是qklbishe.com第15527 篇笔试面试资料
提供答案分析,通过本文《平面上有一个矩形,大小为n×m,其中,长度为n的边是竖直的,长度为m的边是水平的。将矩形切割成n×m个小正方形,规定左上角的小正方形坐标为,左下角的小正方形坐标为,右上角的小正方形坐标为,右下角的小正方形坐标为。从上往下数第x行,从左往右数第列的小正方形坐标为(x,y). 现在,我们对这个矩形进行如下操作,将其顺时针旋转90度x次,然后将其水平翻转y次,然后将其逆时针旋转90度z次。 接着,我们将这个操作后的矩形重新标上坐标,每一个小正方形就有一个原来的坐标和新的坐标。 然后有Q个询问,每一次询问一个原来坐标为的小正方形的新坐标。你需要对所有询问作出回答。-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

平面上有一个矩形,大小为n×m,其中,长度为n的边是竖直的,长度为m的边是水平的。将矩形切割成n×m个小正方形,规定左上角的小正方形坐标为,左下角的小正方形坐标为,右上角的小正方形坐标为,右下角的小正方形坐标为。从上往下数第x行,从左往右数第列的小正方形坐标为(x,y).

现在,我们对这个矩形进行如下操作,将其顺时针旋转90度x次,然后将其水平翻转y次,然后将其逆时针旋转90度z次。

接着,我们将这个操作后的矩形重新标上坐标,每一个小正方形就有一个原来的坐标和新的坐标。

然后有Q个询问,每一次询问一个原来坐标为的小正方形的新坐标。你需要对所有询问作出回答。

平面上有一个矩形,大小为n×m,其中,长度为n的边是竖直的,长度为m的边是水平的。将矩形切割成n×m个小正方形,规定左上角的小正方形坐标为,左下角的小正方形坐标为,右上角的小正方形坐标为,右下角的小正方形坐标为。从上往下数第x行,从左往右数第列的小正方形坐标为(x,y).    现在,我们对这个矩形进行如下操作,将其顺时针旋转90度x次,然后将其水平翻转y次,然后将其逆时针旋转90度z次。    接着,我们将这个操作后的矩形重新标上坐标,每一个小正方形就有一个原来的坐标和新的坐标。    然后有Q个询问,每一次询问一个原来坐标为的小正方形的新坐标。你需要对所有询问作出回答。 零葬
进行一次顺时针旋转,原来第i行就变成倒数第i列,第j列就变成第j行,逆时针旋转相反;水平反转仅将原来第j列变成倒数第j列。直接坐标变换就行,但是我们注意到一个细节,逆时针或顺时针旋转4次相当于没转,水平反转2次相当于没转,因此可以通过取模进一步降低时间复杂度。
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException;  public class Main {     public static int n;     public static int m;     public static void main(String[] args) throws IOException {         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));         String[] params = br.readLine().trim().split(" ");         int x = Integer.parseInt(params[0]);         int y = Integer.parseInt(params[1]);         int z = Integer.parseInt(params[2]);         params = br.readLine().trim().split(" ");         int rows = Integer.parseInt(params[0]);         int cols = Integer.parseInt(params[1]);         int q = Integer.parseInt(br.readLine());         for(int i = 0; i < q; i++){             n = rows;             m = cols;             params = br.readLine().trim().split(" ");             int x1 = Integer.parseInt(params[0]);             int x2 = Integer.parseInt(params[1]);             int[] pos = new int[]{x1, x2};             pos = antiClockwise(flip(clockwise(pos, x), y), z);             System.out.println(pos[0] + " " + pos[1]);         }     }          private static int[] clockwise(int[] pos, int times){         times %= 4;         while(times-- > 0){             // 每旋转一次会行列尺寸互换             n = n ^ m;             m = n ^ m;             n = n ^ m;             // 坐标变换             int temp = m - pos[0] + 1;             pos[0] = pos[1];             pos[1] = temp;         }         return pos;     }          private static int[] flip(int[] pos, int times){         if(times % 2 == 1)             pos[1] = m - pos[1] + 1;         return pos;     }          private static int[] antiClockwise(int[] pos, int times){         times %= 4;         while(times-- > 0){             n = n ^ m;             m = n ^ m;             n = n ^ m;             int temp = pos[0];             pos[0] = n - pos[1] + 1;             pos[1] = temp;         }         return pos;     } }

今天 14:12:18 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 平面上有一个矩形,大小为n×m,其中,长度为n的边是竖直的,长度为m的边是水平的。将矩形切割成n×m个小正方形,规定左上角的小正方形坐标为,左下角的小正方形坐标为,右上角的小正方形坐标为,右下角的小正方形坐标为。从上往下数第x行,从左往右数第列的小正方形坐标为(x,y). 现在,我们对这个矩形进行如下操作,将其顺时针旋转90度x次,然后将其水平翻转y次,然后将其逆时针旋转90度z次。 接着,我们将这个操作后的矩形重新标上坐标,每一个小正方形就有一个原来的坐标和新的坐标。 然后有Q个询问,每一次询问一个原来坐标为的小正方形的新坐标。你需要对所有询问作出回答。-笔试面试资料

提供最优质的资源集合

立即查看 了解详情