• 【USACO1.2_2】★Transformations 方块转换


    一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案依照下面列转换方法转换成新图案的最小方式:

    1:转90度:图案按顺时针转90度。

    2:转180度:图案按顺时针转180度。

    3:转270度:图案按顺时针转270度。

    4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。

    5:组合:图案在水平方向翻转,然后再依照1到3之间的一种再次转换。

    6:不改变:原图案不改变。

    7:无效转换:无法用以上方法得到新图案。

    假设有多种可用的转换方法,请选择序号最小的那个。

    仅仅使用1--7中的一个步骤来完毕这次转换。

    [编辑]格式

    PROGRAM NAME: transform

    INPUT FORMAT:

    (file transform.in)

    第一行: 单独的一个整数N。

    第二行到第N+1行: N行每行N个字符(不是“@”就是“-”)。这是转换前的正方形。

    第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。

    OUTPUT FORMAT:

    (file transform.out)

    单独的一行包含1到7之间的一个数字(在上文已描写叙述)表明须要将转换前的正方形变为转换后的正方形的转换方法。

    [编辑]SAMPLE INPUT

    3
    @-@
    ---
    @@-
    @-@
    @--
    --@
    

    [编辑]SAMPLE OUTPUT

    1


    /*
    ID: zwcwu52
    PROG: transform
    LANG: C++
    */
    
    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    char blkSrc[10][10], blkDst[10][10];	//源方阵、目标方阵
    
    int main()
    {
        ofstream fout ("transform.out");
        ifstream fin ("transform.in");
       
    	unsigned N;		//阶数
    	unsigned num = 7;	//方案数字
    	
    	fin >> N;
    	
    	//读取源方阵
    	for(unsigned i = 0; i < N; i++)
    	{	for(unsigned j = 0; j < N; j++)
    		{fin >> blkSrc[i][j];}
    	}
    	
    	//读取目标方阵
    	for(unsigned i = 0; i < N; i++)
    	{	for(unsigned j = 0; j < N; j++)
    		{fin >> blkDst[i][j];}
    	}
    	
    	do 
    	{
    		bool b = true;		//b 标识是否全然符合
    		
    		//按方案1检測
    		for(unsigned i = 0; i < N; i++)
    		{	for(unsigned j = 0; j < N; j++)
    			{
    				if(blkSrc[i][j] != blkDst[j][N - i - 1])
    				{
    					b = false;
    					break;
    				}
    			}
    		}
    		if(true == b)
    		{
    			num = 1;
    			break;
    		}
    		
    		
    		//按方案2检測
    		b = true;
    		for(unsigned i = 0; i < N; i++)
    		{	for(unsigned j = 0; j < N; j++)
    			{
    				if(blkSrc[i][j] != blkDst[N- i - 1][N - j - 1])
    				{
    					b = false;
    					break;
    				}
    			}
    		}
    		if(true == b)
    		{
    			num = 2;
    			break;
    		}
    		
    		//按方案3检測
    		b = true;
    		for(unsigned i = 0; i < N; i++)
    		{	for(unsigned j = 0; j < N; j++)
    			{
    				if(blkSrc[i][j] != blkDst[N- j - 1][i])
    				{
    					b = false;
    					break;
    				}
    			}
    		}
    		if(true == b)
    		{
    			num = 3;
    			break;
    		}
    		
    		//按方案4检測
    		b = true;
    		for(unsigned i = 0; i < N; i++)
    		{	for(unsigned j = 0; j < N; j++)
    			{
    				if(blkSrc[i][j] != blkDst[i][N - j - 1])
    				{
    					b = false;
    					break;
    				}
    			}
    		}
    		if(true == b)
    		{
    			num = 4;
    			break;
    		}
    		
    		//按方案5检測
    		b = true;
    		for(unsigned i = 0; i < N; i++)
    		{	for(unsigned j = 0; j < N; j++)
    			{
    				if(blkSrc[i][j] != blkDst[N - j - 1][N - i - 1])
    				{
    					b = false;
    					break;
    				}
    			}
    		}
    		if(true == b)
    		{
    			num = 5;
    			break;
    		}
    		
    		//按方案5检測
    		b = true;
    		for(unsigned i = 0; i < N; i++)
    		{	for(unsigned j = 0; j < N; j++)
    			{
    				if(blkSrc[i][j] != blkDst[N - i - 1][j])
    				{
    					b = false;
    					break;
    				}
    			}
    		}
    		if(true == b)
    		{
    			num = 5;
    			break;
    		}
    		
    		//按方案5检測
    		b = true;
    		for(unsigned i = 0; i < N; i++)
    		{	for(unsigned j = 0; j < N; j++)
    			{
    				if(blkSrc[i][j] != blkDst[j][i])
    				{
    					b = false;
    					break;
    				}
    			}
    		}
    		if(true == b)
    		{
    			num = 5;
    			break;
    		}
    		
    		//按方案6检測
    		b = true;
    		for(unsigned i = 0; i < N; i++)
    		{	for(unsigned j = 0; j < N; j++)
    			{
    				if(blkSrc[i][j] != blkDst[i][j])
    				{
    					b = false;
    					break;
    				}
    			}
    		}
    		if(true == b)
    		{
    			num = 6;
    			break;
    		}
    		
    	}while(0);
    	
    	fout << num << endl;
    	
        return 0;
    }
    


  • 相关阅读:
    如何查找.NET程序内存不断上涨的原因(CLRProfiler)
    IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备
    三十而立,从零开始学ios开发:Hello World!
    【原】使用Cocos2d制作一个类似于魔塔的iPhone游戏第一部分(上)
    用python实现一个socket echo程序 && tcp socket的几个关闭状态
    IOS编程浅蓝教程(二) HelloWrld! 建立你的第一个iPhone应用程序
    如何直接强制客户端刷新.js文件
    (WCF的实现、控制台托管与.net平台的调用)
    关于批量数据更新的问题(C#高性能)
    不容错过的window8 metro UI风格的web资源
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7308940.html
Copyright © 2020-2023  润新知