社区讨论
14分,各种情况都试过了都没问题
P1205[USACO1.2] 方块转换 Transformations参与者 5已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @m3e76m34
- 此快照首次捕获于
- 2024/11/12 16:35 去年
- 此快照最后确认于
- 2025/11/04 14:52 4 个月前
C
#include<stdio.h>
int n;
void a(char k[11][11]);
void b(char k[11][11]);
void c(char k[11][11]);
void d(char k[11][11]);
int compare(char arr1[11][11], char arr2[11][11]);
int main(void)
{
scanf("%d",&n);
char first[11][11],final[11][11],atry[11][11],btry[11][11],
ctry[11][11],dtry[11][11],d1try[11][11],d2try[11][11],d3try[11][11];
for(int i = 0 ; i < n ; i ++)
{
for(int j = 0 ; j < n ; j ++)
{
scanf("%c",&first[i][j]);
}
getchar();
}
for(int i = 0 ; i < n ; i ++)
{
for(int j = 0 ; j < n ; j ++)
{
scanf("%c",&final[i][j]);
}
getchar();
}
for(int i = 0 ; i < n ; i ++)
{
for(int j = 0 ; j < n ; j ++)
{
atry[i][j] = first[i][j];
btry[i][j] = first[i][j];
ctry[i][j] = first[i][j];
d1try[i][j] = first[i][j];
d2try[i][j] = first[i][j];
d3try[i][j] = first[i][j];
dtry[i][j] = first[i][j];
}
}
//检测a
a(atry);
if(compare(atry,final) == 1)
{
printf("1");
return 0;
}
//检测b
b(btry);
if(compare(btry,final) == 1)
{
printf("2");
return 0;
}
//检测c
c(ctry);
if(compare(ctry,final) == 1)
{
printf("3");
return 0;
}
//检测d
d(dtry);
if(compare(dtry,final) == 1)
{
printf("4");
return 0;
}
//检测组合变换
d(d1try);
a(d1try);
if(compare(d1try,final) == 1)
{
printf("5");
return 0;
}
d(d2try);
b(d2try);
if(compare(d2try,final) == 1)
{
printf("5");
return 0;
}
d(d3try);
c(d3try);
if(compare(d3try,final) == 1)
{
printf("5");
return 0;
}
//检测不变
if(compare(first,final) == 1)
{
printf("6");
return 0;
}
//如果都不行
printf("7");
return 0;
}
//修改后的旋转函数
void a(char k[11][11]) // 90度旋转
{
char temp[11][11];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
temp[i][j] = k[i][j];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
k[j][n-1-i] = temp[i][j];
}
void b(char k[11][11]) // 180度旋转
{
char temp[11][11];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
temp[i][j] = k[i][j];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
k[n-1-i][n-1-j] = temp[i][j];
}
void c(char k[11][11]) // 270度旋转
{
char temp[11][11];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
temp[i][j] = k[i][j];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
k[n-1-j][i] = temp[i][j];
}
void d(char k[11][11]) // 水平反射
{
char temp[11][11];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
temp[i][j] = k[i][j];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
k[i][n-1-j] = temp[i][j];
}
//比较二维数组
int compare(char arr1[11][11], char arr2[11][11]) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(arr1[i][j] != arr2[i][j])
return 0;
}
}
return 1;
}
有没有大佬救一下
回复
共 6 条回复,欢迎继续交流。
正在加载回复...