有意思的方阵变换 「爱情、让人受尽委屈。」 2023-02-23 05:27 40阅读 0赞 Description 由0和1组成的n*n方阵,如果按照行来看,每一行就是一个n位的二进制数,这个方阵可以经过旋转变换和镜像变换变成新的方阵,我们假定旋转变换有三种,分别是:方阵顺时针旋转90度、180度和270度;镜像变换有两种,分别是水平镜像(从中央沿垂线为中心形成原方阵的镜像)和垂直镜像(从中央沿水平线为中心形成原方阵的镜像);以及先镜像变换再旋转变换的组合变换。现在你的任务是给定n个自然数和变换方式,设计一个程序把这n个数转换成二进制,然后组成n*n方阵,再把这个方阵经过变换得到新的方阵,最后把得到的方阵,以行为单位输出对应的十进制。 Input 本问题有多组测试数据,对于每组测试数据,输入有两行,第一行是三个用空格隔开的正整数n(1<=n<=31),a(1<=a<=3),b(1<=b<=3),其中n表示方阵的大小,a表示镜像变换方式(1:不进行镜像变换,2:水平镜像变换,3:垂直镜像变换),b表示旋转变换(1:旋转90度,2:旋转180度,3:旋转270度);第二行是n个自然数ai(0<=ai<=2^n-1,1<=i<=n)。 Output 对于每组测试数据,输出只有一行,用空格分开的n个变换后得到的十进制数,行尾没有空格。 Sample Input 4 1 1 15 7 9 4 Sample Output 5 11 3 7 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=100010; int a[50][50],b[50][50]; int main() { int n,aa,bb; ll x; while(cin>>n>>aa>>bb) { memset(a,0,sizeof(a)); for(int i=0;i<n;i++) { scanf("%lld",&x); int pos=n; while(x) { a[i+1][pos--]=x%2; x/=2; } } if(aa==2) { for(int i=1;i<=n;i++) { for(int j=1;j<=n/2;j++) { swap(a[i][j],a[i][n-j+1]); } } } else if(aa==3) { for(int i=1;i<=n/2;i++) { for(int j=1;j<=n;j++) { swap(a[i][j],a[n-i+1][j]); } } } if(bb==1) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { b[i][j]=a[n-j+1][i]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { a[i][j]=b[i][j]; } } } else if(bb==2) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { b[i][j]=a[n-j+1][i]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { a[i][j]=b[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { b[i][j]=a[n-j+1][i]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { a[i][j]=b[i][j]; } } } else if(bb==3) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { b[i][j]=a[n-j+1][i]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { a[i][j]=b[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { b[i][j]=a[n-j+1][i]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { a[i][j]=b[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { b[i][j]=a[n-j+1][i]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { a[i][j]=b[i][j]; } } } for(int i=1;i<=n;i++) { ll ans=0,bit=(1ll<<(n-1)); for(int j=1;j<=n;j++){ if(a[i][j])ans+=bit; bit>>=1; } printf("%lld%c",ans," \n"[i==n]); } } return 0; }
相关 有意思的界面 转载链接[https://www.cnblogs.com/ybqjymy/p/13890567.html][https_www.cnblogs.com_ybqjymy_p_13 怼烎@/ 2024年03月25日 11:46/ 0 赞/ 87 阅读
相关 有意思的方阵变换 Description 由0和1组成的nn方阵,如果按照行来看,每一行就是一个n位的二进制数,这个方阵可以经过旋转变换和镜像变换变成新的方阵,我们假定旋转变换有三种,分别是 「爱情、让人受尽委屈。」/ 2023年02月23日 05:27/ 0 赞/ 41 阅读
相关 有意思的话 能够发现问题。能够发现现有方案的问题。 能够提供解决问题的思路和方案,并能比较这些方案的优缺点。 能够做出正确的技术决定。用什么样的技术、什么解决方案、怎 末蓝、/ 2022年12月30日 13:35/ 0 赞/ 165 阅读
相关 螺旋方阵 所谓“螺旋方阵”,是指对任意给定的NNN,将1到N×NN\\times NN×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×NN\\times NN×N的方阵里。 骑猪看日落/ 2022年09月27日 06:18/ 0 赞/ 275 阅读
相关 【游戏开发创新】使用Unity制作方阵编队,CSDN方阵迎面走来,感谢CSDN的中秋礼物(图像采样 | 点阵 | 方阵 | 队形 | 变换 | 动画) 文章目录 一、前言 二、运行效果 三、实现原理 四、图片资源 五 刺骨的言语ヽ痛彻心扉/ 2022年09月08日 11:53/ 0 赞/ 272 阅读
相关 转方阵 对一个方阵转置,就是把原来的行号变列号,原来的列号变行号 例如,如下的方阵: 1 2 3 4 5 6 7 8 浅浅的花香味﹌/ 2022年08月08日 13:59/ 0 赞/ 168 阅读
相关 螺旋方阵 螺旋方阵 Time Limit: 1000MS Memory Limit: 65536KB [Submit][] [ Statistic][S ゝ一纸荒年。/ 2022年07月03日 14:58/ 0 赞/ 210 阅读
相关 螺旋方阵 Problem Description n×n的螺旋方阵当n=5和n=3时分别是如下的形式 ![1295.png][] 请给出一个程序,对于任意的输入n(0 墨蓝/ 2022年06月17日 05:28/ 0 赞/ 227 阅读
相关 螺旋方阵 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 所谓“螺旋方阵”,是指对任意给定的N,将1到N\N的 左手的ㄟ右手/ 2022年05月29日 05:25/ 0 赞/ 239 阅读
相关 方阵相乘 一 代码 package Matrix; / Copyright (C), 2020-2020, XXX有限公司 FileNam 约定不等于承诺〃/ 2021年07月24日 16:15/ 0 赞/ 336 阅读
还没有评论,来说两句吧...