Section 1.2 transform

这道题要求找到一种操作方式对字符串数组a进行操作,使得其与b一致。一共有六种操作方式,

首先定义三个数组,a,b,c,前两个数组是输入,然后c数组每次选择操作方式之前使其等于a,

然后对c进行操作,这道题值得注意的是操作选择是从1到6,必须按照顺序来,进行每一种操作

后, 将c与b做比较,如果一致,就输出当前操作的编号,如果找不到操作方式,那么就输出 7.

/*
ID:yucept21
LANG:C++
TASK:transform
*/

#include<cstdio>
#include<cstring>
#include<cstdlib>

const int N = 15;

char a[N][N], b[N][N], c[N][N];
int n;

int idea( char a[N][N], int cur)
{
char b[N][N];
memcpy( b, a, sizeof b);
for( int i = 1; i <= n; i ++)
for( int j = 1; j <= n; j ++)
{
if( cur == 1) a[i][j] = b[n - j + 1][i]; //顺时针90°
if( cur == 2) a[i][j] = b[n - i + 1][ n - j + 1]; //顺时针180°
if( cur == 3) a[i][j] = b[j][ n - i + 1]; //顺时针270°
if( cur == 4) a[i][j] = b[i][ n - j + 1]; //水平翻转
}
}

int get()
{
for( int i = 1; i <= n; i ++)
for( int j = 1; j <= n; j ++)
c[i][j] = a[i][j];
}

bool check()
{
for( int i = 1; i <= n; i ++)
for( int j = 1; j <= n; j ++)
if( c[i][j] != b[i][j])
return false;
return true;
}

void make( char a[N][N])
{
char s[15];
for( int i = 1; i <= n; i ++)
{
scanf( "%s", s);
for( int j = 1; j <= n; j ++)
a[i][j] = s[j - 1];
}
}

int main()
{

freopen( "transform.in", "r", stdin);
freopen( "transform.out", "w", stdout);

scanf( "%d", &n);
make( a );
make( b );
for( int i = 1; i <= 4; i ++)
{
get();
idea( c, i);
if( check() ) {
printf( "%d\n", i);
return 0;
}
}

for( int i = 1; i <= 3; i ++)
{
get();
idea( c, 4);
idea( c, i);
if( check() ) {
printf( "5\n");
return 0;
}
}

get();
if( check() )
{
printf( "6\n");
return 0;
}

printf( "7\n");
return 0;
}

 

原文链接: https://www.cnblogs.com/Yu2012/archive/2012/01/16/2323934.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    Section 1.2 transform

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/40279

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午4:59
下一篇 2023年2月8日 下午4:59

相关推荐