XTU—OJ 1258矩阵
矩阵
题目描述
编写一个程序,将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矩阵相关推荐
- XTU OJ 1324 Hash
XTU OJ 1324 Hash Hash 题目描述 H a s h Hash Hash是一种很常用的数据结构,Hash技术的关键在于Hash函数的选取. 一种常用整数的 H a s h Hash H ...
- XTU OJ 1375 Fibonacci
XTU OJ 1375 Fibonacci 题目描述 小明非常喜欢FibonacciFibonacciFibonacci数列,数列为 f1=1,f2=2,fn=fn−1+fn−2f_1=1,f_2=2 ...
- XTU OJ 1355 Euler‘s Totient Function(欧拉函数)
XTU OJ 1355 Euler's Totient Function(欧拉函数) 题目描述 对于整数n,定义ϕ(n)ϕ(n)ϕ(n)为小于或等于n,并与n互质的整数的个数,比如6,比它小的和它互质 ...
- 西南民大oj(矩阵快速幂)
我的名字不可能那么难记 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 16 测试通过 ...
- XTU Oj 128
Rotate 题目描述 一个4×4的矩阵,我们可以把矩阵看成内外两圈,我们可以把外圈按顺时钟或者逆时钟转动,每次转动90度. 我们想得到一个2×2的子矩阵,使得这个子矩阵4个元素的累加和最大.请问最大 ...
- zzuli OJ 1127: 矩阵乘积
Description 计算两个矩阵A和B的乘积. Input 第一行三个正整数m.p和n,0<=m,n,p<=10,表示矩阵A是m行p列,矩阵B是p行n列: 接下来的m行是矩阵A的内容, ...
- 矩阵快速幂 | 北邮OJ | 96. 矩阵幂
https://vpn.bupt.edu.cn/http/10.105.242.80/problem/p/96/ reference: https://www.cnblogs.com/cmmdc/p/ ...
- 质因数分解唯一定理(XTU OJ)
今年的oj 很有几道题用到了,这里介绍一下 质因数分解(唯一分解定理) 基本概念: 每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数. 分解质因数只针对合 ...
- XTU OJ 1359 字符频度
淦啊,好久不写memset都忘记怎么写了,调了半天QAQ #include<stdio.h> #include<string.h> char a[1005]; int alp[ ...
最新文章
- 复习01统计学习方法(机器学习中的重要概念)---图片版
- AI驱动洞察 智能数据营销时代迎来拐点
- asd.equals(s)与s.equals(asd)为什么前者可避免NullPointerException
- Android 异步加载图片分析
- Keras【Deep Learning With Python】CNN卷积神经网络(看不懂你打我系列)
- 【机器视觉】 endtry算子
- 促进儿童语言发展的方法
- LeetCode——树:递归
- 如何在Ubuntu上查看和写入系统日志文件
- oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...
- 查看 Proxy 的 $ProxyX.class文件
- PyTorch学习—18.标准化—Batch Normalization、Layer Normalizatoin、Instance Normalizatoin、Group Normalizatoin
- 任务 F :工时统计
- DSOFramer的类别和安装
- Android 如何直播RTMP流
- pdf去除签名_扫描全能王一键识别图片/PDF/文档/文本文字随意转换
- JAVA计算机毕业设计新闻推送系统Mybatis+源码+数据库+lw文档+系统+调试部署
- 【C语言随笔2】GCC编译环境下Socket编程简单实践
- cpu之ALUSrc_Reg1
- 炒白菜怎么做(保姆级教程 爸妈吃了都说好)