1.2.2 Transformations

  刚开始一看题目, 看起来很难的样子, 于是就先放过了;等我把其他题做完后, 我仔细看了下题目, 才发现, 这个题目原来这嘛水 ……

#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int n;
void Spin( char map[][11], char str[][11], int num)//旋转90度 
{
	int i, j;
	for(i=0; i<n; i++)
		for(j=0; j<n; j++)
		{
			str[j][n-1-i]=map[i][j];	
		}
}
void Turn(char map[][11], char str[][11])//水平翻转
{
	int i, j;
	for(i=0; i<n; i++)
		for(j=0; j<n; j++)
		{
			str[i][n-1-j]=map[i][j];	
		}
} 
bool Judge(char aim[][11], char str[][11])//判断是否相等, 相等返回0,否则返回1
{
	int i, j;
	for(i=0; i<n; i++)
		for(j=0; j<n; j++)
		{
			if( aim[i][j]!=str[i][j])
				return 1;
		}
		return 0;
}

int main()
{
	ifstream fin("transform.in");  
    ofstream fout("transform.out");  
	char map[11][11], aim[11][11], str1[11][11], str2[11][11], str3[11][11], str4[11][11];
	int  flag=1, i, ans;
	fin>>n;
	for(i=0; i<n; i++)
		//	cin>>map[i];
		fin>>map[i];
    for(i=0; i<n; i++)
		//cin>>aim[i];
		fin>>aim[i];
    
	Spin(map, str1);//旋转90度
	flag=Judge(aim, str1);
	if( flag==0 )  ans=1;	
	else
	{
		Spin( str1, str2);//再旋转90度
		flag=Judge(aim, str2);
		if( flag==0 )	ans=2;
		else
		{
			Spin(str2, str3);//再旋转90度
			flag=Judge(aim, str3);
			if( flag==0 )	ans=3;	
			else
			{
				Turn( map, str4 );//水平翻转
				flag=Judge(aim, str4);
				if( flag==0 )	ans=4;	
				else
				{ 
					Spin(str4, str1);//旋转90度
					flag=Judge(aim, str1);
					if( flag==0 )  ans=5;	
					else
					{
						Spin(str1, str2);//再旋转90度
						flag=Judge(aim, str2);
						if( flag==0 )	ans=5;	
						else
						{
							Spin(str2, str3);//再旋转90度
							flag=Judge(aim, str3);
							if( flag==0 )   ans=5;	
							else
							{
								if( Judge(aim, map)==0 )
									ans=6;
								else
									ans=7;
							}
						}
					}
				}
				
			}
		}
	}	
	//cout<<ans<<endl;
	fout<<ans<<endl;   
} 


你可能感兴趣的:(1.2.2 Transformations)