idea:
1.顺时针90度旋转到处理:b[i][j] = a[n-j][i];
2.180度、270度分别看成2次、3次90度旋转;
3.水平翻转到处理:看成列变换,b[i][j] = a[i][n-j];
4.分别做1-7处理,找出符合的代码输出。
实现代码:
/*
ID: mrster.1
LANG: C++
TASK: transform
* */
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
string* rotateBase(string* pattern,int n,int rotateType);
string* rotate(string* pattern,int n,int rotateNum);
bool compareStr(string* str1,string* str2,int n);
int main()
{
//1--rotate by 90 2--rotate by horizon
ifstream fin;
ofstream fout;
string tem;
fin.open("transform.in");
fout.open("transform.out");
int n = 3;
fin>>n;
string* pattern = new string[n];
string* compare = new string[n];
getline(fin,tem);
for(int i = 0;i < n;i++)
{
getline(fin,pattern[i]);
}
for(int i = 0;i < n;i++)
{
getline(fin,compare[i]);
}
int returnNum = 0;
string* result = new string[n];
for(int i = 1;i < 9;i++)
{
result = rotate(pattern,n,i);
if(compareStr(result,compare,n) == true)
{
returnNum = i;
break;
}
}
switch(returnNum)
{
case 1:fout<<1<<endl;break;
case 2:fout<<2<<endl;break;
case 3:fout<<3<<endl;break;
case 4:fout<<4<<endl;break;
case 5:case 6:case 7:fout<<5<<endl;break;
case 8:fout<<6<<endl;break;
default:fout<<7<<endl;
}
fin.close();
fout.close();
}
bool compareStr(string* str1,string* str2,int n)
{
for(int i = 0;i < n;i++)
{
if(str1[i] !=str2[i])return false;
}
return true;
}
string* rotate(string* pattern,int n,int rotateNum)
{
string* result = new string[n];
for(int i = 0;i < n;i++)
{
result[i].resize(n);
}
if(rotateNum == 1)
{
result = rotateBase(pattern,n,1);
}
else if(rotateNum == 2)
{
result = rotateBase(pattern,n,1);
result = rotateBase(result,n,1);
}
else if(rotateNum == 3)
{
result = rotateBase(pattern,n,1);
result = rotateBase(result,n,1);
result = rotateBase(result,n,1);
}
else if(rotateNum == 4)
{
result = rotateBase(pattern,n,2);
}
else if(rotateNum == 5)
{
result = rotateBase(pattern,n,2);
result = rotateBase(result,n,1);
}
else if(rotateNum == 6)
{
result = rotateBase(pattern,n,2);
result = rotateBase(result,n,1);
result = rotateBase(result,n,1);
}
else if(rotateNum == 7)
{
result = rotateBase(pattern,n,2);
result = rotateBase(result,n,1);
result = rotateBase(result,n,1);
result = rotateBase(result,n,1);
}
else if(rotateNum == 8)
{
result = pattern;
}
return result;
}
string* rotateBase(string* pattern,int n,int rotateType)
{
string* result = new string[n];
for(int i = 0;i < n;i++)
{
result[i].resize(n);
}
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(rotateType == 1)
{
result[i][j] = pattern[n-j-1][i];
}
else if(rotateType == 2)
{
result[i][j] = pattern[i][n-j-1];
}
}
}
return result;
}