我先讲一下我的思路

  1. 将A,B,C,D四种操作用函数储存起来;

  2. 枚举所有可能出现的情况:A,B,C,D,AA,AB,AC,AD,BB,BC,BD,CC,CD,DD,ABC,ABD,ACD,BCD,ABCD共19种情况;(这里面一定有遗漏的点,但由于数据太水,所以没有一一列出来)

  3. 对初始矩阵进行上面枚举的操作,如果操作后与最终矩阵相同,便直接输出所对应的枚举的操作;

  4. 如果此时还没有结束程序(即所有操作都枚举完之后,皆不符合最终矩阵),就直接输出“Poland cannot into space!!!”


这是我的局部程序

1.A的操作函数:

int A_operation()
{
memset(c,0,sizeof(c));//由于要多次用这个转换数组,所以必须清零
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
c[i][j]=a[3-j+1][i];//按照题目要求进行操作
}
}
memcpy(a,c,sizeof(a));//将c这个中间 数组里的值拷贝到a数组中
}

可以看到这里我用了memset和memcpy这两个函数:

memset 是内存赋值函数,比用for来赋值快很多,只是只能赋值常量;

用法:memset(数组名,常量,sizeof(数组名))

memcpy 是内存赋值函数,将一个数组里的值复制到另一个数组中

用法:memcpy(目标数组名,被复制函数名,sizeof(被复制函数名))


2.枚举的操作情况:

memcpy(a,b,sizeof(a));//因为a的值会多次改变,所以b是输入的初始数组,要在每一次枚举的操作后,将a覆盖
flag=1;//标志,判断是否成功
A_operation();
A_operation();//进行操作
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])//假如有一个不相同,就跳出循环
{
flag=0;//失败
goto p;//跳出循环
}
}
}
p:
if(flag==1)//假如没有失败
{
printf("AA");//输出操作
return 0; //结束程序
}

这里有一个新的跳出循环的方法,goto语句(我也是才学的)

这个语句与break,continue,return等语句的区别是:

break是跳出一层循环,continue是跳过本次循环,return是结束程序||函数,而goto则是想怎么跳就怎么跳(是不是有点心动了~~~)

用法:goto 语句名

语句名:(要跳到的地方)


直接上程序

#include<bits/stdc++.h>
using namespace std;
int a[4][4],b[4][4],c[4][4],d[4][4];
int flag=1;
int A_operation()
{
memset(c,0,sizeof(c));
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
c[i][j]=a[3-j+1][i];
}
}
memcpy(a,c,sizeof(a));
}
int B_operation()
{
memset(c,0,sizeof(c));
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
c[i][j]=a[j][3-i+1];
}
}
memcpy(a,c,sizeof(a));
} int C_operation()
{
memset(c,0,sizeof(c));
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
c[i][j]=a[i][3-j+1];
}
}
memcpy(a,c,sizeof(a));
}
int D_operation()
{
memset(c,0,sizeof(c));
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
c[i][j]=a[3-i+1][j];
}
}
memcpy(a,c,sizeof(a));
}
int main()
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
scanf("%d",&b[i][j]);
}
}
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
scanf("%d",&d[i][j]);
}
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto a;
}
}
}
a:
if(flag==1)
{
printf("A");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
B_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto b;
}
}
}
b:
if(flag==1)
{
printf("B");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
C_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto c;
}
}
}
c:
if(flag==1)
{
printf("C");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
D_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto d;
}
}
}
d:
if(flag==1)
{
printf("D");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
A_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto p;
}
}
}
p:
if(flag==1)
{
printf("AA");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
B_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto e;
}
}
}
e:
if(flag==1)
{
printf("AB");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
C_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto f;
}
}
}
f:
if(flag==1)
{
printf("AC");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
D_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto g;
}
}
}
g:
if(flag==1)
{
printf("AD");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
B_operation();
B_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto q;
}
}
}
q:
if(flag==1)
{
printf("BB");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
B_operation();
D_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto h;
}
}
}
h:
if(flag==1)
{
printf("BD");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
C_operation();
B_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto i;
}
}
}
i:
if(flag==1)
{
printf("BC");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
C_operation();
C_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto r;
}
}
}
r:
if(flag==1)
{
printf("CC");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
C_operation();
D_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto j;
}
}
}
j:
if(flag==1)
{
printf("CD");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
D_operation();
D_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto s;
}
}
}
s:
if(flag==1)
{
printf("DD");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
B_operation();
C_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto k;
}
}
}
k:
if(flag==1)
{
printf("ABC");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
D_operation();
C_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto l;
}
}
}
l:
if(flag==1)
{
printf("ACD");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
B_operation();
D_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto m;
}
}
}
m:
if(flag==1)
{
printf("ABD");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
D_operation();
B_operation();
C_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto n;
}
}
}
n:
if(flag==1)
{
printf("BCD");
return 0;
}
memcpy(a,b,sizeof(a));
flag=1;
A_operation();
D_operation();
B_operation();
C_operation();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j]!=d[i][j])
{
flag=0;
goto o;
}
}
}
o:
if(flag==1)
{
printf("ABCD");
return 0;
}
printf("Poland cannot into space!!!");//假如上面枚举的情况都不行,就输出(对应4)
return QWQ
}

洛谷P2630 题解的更多相关文章

  1. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  2. 洛谷P5759题解

    本文摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/solution-p5759 \[这道题重在理解题意 \] 选手编号依次为: \ ...

  3. 关于三目运算符与if语句的效率与洛谷P2704题解

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  4. c++并查集配合STL MAP的实现(洛谷P2814题解)

    不会并查集的话请将此文与我以前写的并查集一同食用. 原题来自洛谷 原题 文字稿在此: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. ...

  5. 洛谷P2607题解

    想要深入学习树形DP,请点击我的博客. 本题的DP模型同 P1352 没有上司的舞会.本题的难点在于如何把基环树DP转化为普通的树上DP. 考虑断边和换根.先找到其中的一个环,在上面随意取两个点, 断 ...

  6. 【洛谷】题解 P1056 【排座椅】

    题目链接 因为题目说输入保证会交头接耳的同学前后相邻或者左右相邻,所以一对同学要分开有且只有一条唯一的通道才能把他们分开. 于是可以吧这条通道累加到一个数组里面.应为题目要求纵列的通道和横列的通道条数 ...

  7. 洛谷 P2630 图像变换

    P2630 图像变换 题目描述 给定3行3列的图像各像素点灰度值,给定最终图像,求最短.字典序最小的操作序列. 其中,可能的操作及对应字符有如下四种: A:顺时针旋转90度: B:逆时针旋转90度: ...

  8. 洛谷P3572题解

    这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...

  9. [洛谷P1972][题解][SDOI2009]HH的项链

    别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如 ...

随机推荐

  1. MySQL性能分析之Explain

    目录 Explain基础 Explain进阶 Explain基础 关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output ,这里需要强调rows是核心指标, ...

  2. eclipse中一个项目引用另一个项目,运行报:java.lang.NoClassDefFoundError

    项目右击-properties-Java Build Path -Porjects-add.选中了某个项目. 项目用tomcat启动时,报错:java.lang.NoClassDefFoundErro ...

  3. 关于Nginx499、502和504的分析

    我相信有些人在面试运维类岗位的时候会碰到对方问关于这方面的问题,我这里通过几个实验来复现这个情况,并做出相关分析,我希望大家看完后针对这种问题能有一个清晰思路. 服务器 IP Nginx 192.16 ...

  4. Oracle数据库---异常处理

    Oracle异常处理在PL/SQL语句书写时,需要处理的异常-- 不做异常处理时DECLARE v_name emp.ename%TYPE; v_sal emp.sal%TYPE;BEGIN SELE ...

  5. 自己实现定制自己的专属java锁,来高效规避不稳定的第三方

    java juc 包下面已经提供了很多并发锁工具供我们使用,但在日常开发中,为了各种原因我们总是会用多线程来并发处理一些问题,然而并不是所有的场景都可以使用juc 或者java本身提供的锁来方便的帮助 ...

  6. VM虚拟机 VMWare Workstation Pro v15.0.1 中文破解版

    虚拟机软件VMware Workstation Pro 15.0 全新版本发布,此次更新了诸多客户机操作系统版本,另外完全兼容Win10创意者更新支持.12.0之后属于大型更新,专门为Win10的安装 ...

  7. 用Supervisor实现进程守护,在异常退出时自动重启

    程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响. 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只 ...

  8. ~~Python文件简单操作~~

    进击のpython Python文件操作 在说Python的文件操作之前 我们可以先思考一个问题 平时我们是怎么对电脑中的文件进行操作的呢? 打开电脑⇨找到文件⇨打开文件⇨读文件⇨修改文件⇨保存文件⇨ ...

  9. AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster

    Distributed Publish Subscribe in Cluster 基本定义 在单机环境下订阅与发布是很常用的,然而在集群环境是比较麻烦和不好实现的: AKKA已经提供了相应的实现,集群 ...

  10. Yarn工作机制

    概述 (0)Mr 程序提交到客户端所在的节点. (1)Yarnrunner 向 Resourcemanager 申请一个 Application. (2)rm将该应用程序的资源路径和Applicati ...