矩阵

题目描述

编写一个程序,将1~n2按行依次填入n×n的矩阵,执行若干条行或者列的循环移动的指令,再将数字按行依次取出。

指令如下:

指令 含义
L x y x行循环左移y次
R x y x行循环右移y次
U x y x列循环上移y次
D x y x列循环下移y次

输入

第一行是一个整数K,表示样例的个数。 每个样例的第一行是两个整数n(1≤n≤10)和m(1≤m≤1000),分别表示矩阵的大小和指令的条数。
以后的m行是m条指令,矩阵的行列按1开始计数,指令满足1≤x≤n,1≤y≤n−1。

输出

每行输出一个样例的结果,数字之间用一个空格隔开,行末无空格。

样例输入

4
3 1
L 1 1
3 1
R 1 1
3 1
U 1 1
3 1
D 1 1

样例输出

2 3 1 4 5 6 7 8 9
3 1 2 4 5 6 7 8 9
4 2 3 7 5 6 1 8 9
7 2 3 1 5 6 4 8 9

这个题目最重要的就是如何实现二维数组循环移动:

颠倒交换法

算法描述:循环左移k位, 先把前面 1 到 k位置的数字首尾交换, 然后再把 k 到 len位置首尾交换, 最后再把 1 到 len下标位置首位交换即可实现。例如1 2 3 4 5 6循环左移两次,我们可以先把1到2的数字交换即 2 1      3 4 5 6这个时候再把后边剩下的数字交换即 2 1 6 5 4 3这个时候再整体颠倒交换即3 4 5 6 1 2 ,可以自己感受下。

解决了循环移动的问题后,将其写成函数,之后分情况调用就行了。

#include<stdio.h>
int str[11][11]={0};
void reverse1(int left,int right,int x){int i=left,j=right;while(i<j){int t = str[x][i];str[x][i] = str[x][j];str[x][j] = t;i++;j--;}
}
void reverse2(int left,int right,int x){int i=left,j=right;while(i<j){int t = str[i][x];str[i][x] = str[j][x];str[j][x] = t;i++;j--;}
}
int main()
{int i,k,j;scanf("%d",&k);while(k--){int n,m,flag=0;scanf("%d%d",&n,&m);for(i=1;i<=n;i++){for(j=1;j<=n;j++){flag++;str[i][j]=flag;}}while(m--){char A;int x,y;getchar();scanf("%c%d%d",&A,&x,&y);if(A=='L'){reverse1(1,y,x);reverse1(y+1,n,x);reverse1(1,n,x);}if(A=='R'){reverse1(1,n-y,x);reverse1(n-y+1,n,x);reverse1(1,n,x);}if(A=='U'){reverse2(1,y,x);reverse2(y+1,n,x);reverse2(1,n,x);}if(A=='D'){reverse2(1,n-y,x);reverse2(n-y+1,n,x);reverse2(1,n,x);}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==n&&j==n){printf("%d\n",str[n][n]);break;}printf("%d ",str[i][j]);}}}return 0;
}

XTU—OJ 1258矩阵相关推荐

  1. XTU OJ 1324 Hash

    XTU OJ 1324 Hash Hash 题目描述 H a s h Hash Hash是一种很常用的数据结构,Hash技术的关键在于Hash函数的选取. 一种常用整数的 H a s h Hash H ...

  2. XTU OJ 1375 Fibonacci

    XTU OJ 1375 Fibonacci 题目描述 小明非常喜欢FibonacciFibonacciFibonacci数列,数列为 f1=1,f2=2,fn=fn−1+fn−2f_1=1,f_2=2 ...

  3. XTU OJ 1355 Euler‘s Totient Function(欧拉函数)

    XTU OJ 1355 Euler's Totient Function(欧拉函数) 题目描述 对于整数n,定义ϕ(n)ϕ(n)ϕ(n)为小于或等于n,并与n互质的整数的个数,比如6,比它小的和它互质 ...

  4. 西南民大oj(矩阵快速幂)

    我的名字不可能那么难记 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 16            测试通过 ...

  5. XTU Oj 128

    Rotate 题目描述 一个4×4的矩阵,我们可以把矩阵看成内外两圈,我们可以把外圈按顺时钟或者逆时钟转动,每次转动90度. 我们想得到一个2×2的子矩阵,使得这个子矩阵4个元素的累加和最大.请问最大 ...

  6. zzuli OJ 1127: 矩阵乘积

    Description 计算两个矩阵A和B的乘积. Input 第一行三个正整数m.p和n,0<=m,n,p<=10,表示矩阵A是m行p列,矩阵B是p行n列: 接下来的m行是矩阵A的内容, ...

  7. 矩阵快速幂 | 北邮OJ | 96. 矩阵幂

    https://vpn.bupt.edu.cn/http/10.105.242.80/problem/p/96/ reference: https://www.cnblogs.com/cmmdc/p/ ...

  8. 质因数分解唯一定理(XTU OJ)

    今年的oj 很有几道题用到了,这里介绍一下 质因数分解(唯一分解定理) 基本概念: 每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数. 分解质因数只针对合 ...

  9. XTU OJ 1359 字符频度

    淦啊,好久不写memset都忘记怎么写了,调了半天QAQ #include<stdio.h> #include<string.h> char a[1005]; int alp[ ...

最新文章

  1. 复习01统计学习方法(机器学习中的重要概念)---图片版
  2. AI驱动洞察 智能数据营销时代迎来拐点
  3. asd.equals(s)与s.equals(asd)为什么前者可避免NullPointerException
  4. Android 异步加载图片分析
  5. Keras【Deep Learning With Python】CNN卷积神经网络(看不懂你打我系列)
  6. 【机器视觉】 endtry算子
  7. 促进儿童语言发展的方法
  8. LeetCode——树:递归
  9. 如何在Ubuntu上查看和写入系统日志文件
  10. oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...
  11. 查看 Proxy 的 $ProxyX.class文件
  12. PyTorch学习—18.标准化—Batch Normalization、Layer Normalizatoin、Instance Normalizatoin、Group Normalizatoin
  13. 任务 F :工时统计
  14. DSOFramer的类别和安装
  15. Android 如何直播RTMP流
  16. pdf去除签名_扫描全能王一键识别图片/PDF/文档/文本文字随意转换
  17. JAVA计算机毕业设计新闻推送系统Mybatis+源码+数据库+lw文档+系统+调试部署
  18. 【C语言随笔2】GCC编译环境下Socket编程简单实践
  19. cpu之ALUSrc_Reg1
  20. 炒白菜怎么做(保姆级教程 爸妈吃了都说好)

热门文章

  1. 巴斯扩散模型-Bass Diffusion Model
  2. apt-get 离线包安装
  3. BIOS设置与硬盘分区
  4. CV算法工程师自修指南
  5. Redis架构设计实现
  6. 多线程、并发/并行、自定义线程类、线程安全、守护线程、定时器、线程状态、线程池
  7. [完结]saliency filters精读之permutohedral lattice
  8. 单片机与 PC 机串口通信实验
  9. nor flash操作
  10. 啤酒灌装机的控制器西门子S7-200SMART