zoukankan      html  css  js  c++  java
  • 洛谷P2630 题解

    我先讲一下我的思路

    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
    }
    
  • 相关阅读:
    每一次面试都是提升(一)
    Gof设计模式分组
    MSSqlServer 通过sql语句 还原数据库(已有备份文件)
    自定义配置节与配置节的读取
    Javascript判断时间大小的方法
    C#微信开发之旅(十三):V2订单查询&退款(完结)
    C#微信开发之旅(十二):V2告警接口&维权接口
    C#微信开发之旅(十一):V2发货接口
    C#微信开发之旅(十):APP预支付及支付参数生成(V2)
    C#微信开发之旅(九):JSAPI支付(V3)
  • 原文地址:https://www.cnblogs.com/nth-element/p/10604318.html
Copyright © 2011-2022 走看看