[C语言]求助大佬,本地运行正确提交测试错误(注释清晰)
查看原帖
[C语言]求助大佬,本地运行正确提交测试错误(注释清晰)
1306128
WordSiSi楼主2024/6/27 19:48
在通过了自己的测试之后提交答案,很遗憾的WA了,于是下载了洛谷提供的测试数据,发现输入了下载下来的测试数据后本地的输出结果和标答一致,但是提交无论如何也过不了,再检查了输入格式等实在找不出错误故来求助各路大佬(双手合十)
代码如下:
#include <stdio.h>
#include <stdlib.h>

void input_img(int n, char img[n][n]); //输入字符矩阵
int contrast(int n, char img_2[n][n], char img_transform[n][n]); //对比程序转换后的和输入转换后的图是否相同
int method_1(int n, char img[n][n], char img_transform[n][n]);   //判断是否是方法一转换(顺转90°)
int method_2(int n, char img[n][n], char img_transform[n][n]);   //判断是否是方法二转换(中心对称--顺转180°)
int method_3(int n, char img[n][n], char img_transform[n][n]);   //判断是否是方法三转换(逆转90°)
int method_4(int n, char img[n][n], char img_transform[n][n]);   //判断是否是方法四转换(y轴对称--镜像反转)
int method_5(int n, char img[n][n], char img_transform[n][n]);   //判断是否是方法五转换(组合:先镜像翻转,再进行1~3中一次转换)
int method_6(int n, char img[n][n], char img_transform[n][n]);   //判断是否是方法六转换(不改变)

int main()
{
   int n, key=-1, i, j;
   scanf("%d", &n);  //输入矩阵大小n*n
   char img[n][n], img_transform[n][n];   //定义n*n的字符矩阵和转换后的字符矩阵
   input_img(n, img);   //输入转换前的方块
   input_img(n, img_transform);  //输入转换后的方块
   if (key = method_6(n, img, img_transform));  //依次判断原方块能通过什么方法转换
   else if(key = method_1(n, img, img_transform)) ;
   else if(key = method_2(n, img, img_transform)) ;
   else if(key = method_3(n, img, img_transform)) ;
   else if(key = method_4(n, img, img_transform)) ;
   else if(key = method_5(n, img, img_transform)) ;
   switch (key) {    //输出结果
      case 1: printf("1\n"); break;
      case 2: printf("2\n"); break;
      case 3: printf("3\n"); break;
      case 4: printf("4\n"); break;
      case 5: printf("5\n"); break;
      case 6: printf("6\n"); break;
      default: printf("7\n"); break;
   }
   system("pause");
   return 0;
}

void input_img(int n, char img[n][n])  //输入字符矩阵
{
   int i, j;
   char c;
   for (i=0; i<n; i++)  //顺序输入字符并排除换行符
      for (j=0; j<n; j++) {
         do{
            c = getchar();
         }while( c == '\n');
         img[i][j] = c;
      }
}
int contrast(int n, char img_2[n][n], char img_transform[n][n]) //对比程序转换后的和输入转换后的图是否相同
{
   int i, j;
   for (i=0; i<n; i++)  //与结果比对
      for (j=0; j<n; j++)
         if (img_2[i][j] != img_transform[i][j])
            return 1;   //返回1:不同    返回0:相同
   return 0;
}
int method_1(int n, char img[n][n], char img_transform[n][n])  //判断是否是方法一转换(顺转90°)
{
   int i, j;
   char img_2[n][n];
   for (i=0; i<n; i++)  //将原图转换
      for (j=0; j<n; j++)
         img_2[j][n-1-i] = img[i][j];

   if (contrast(n, img_2, img_transform)) {
      return 0;
   }

   return 1;
}
int method_2(int n, char img[n][n], char img_transform[n][n])   //判断是否是方法二转换(中心对称--顺转180°)
{
   int i, j;
   char img_2[n][n];
   for (i=0; i<n; i++)  //将原图转换
      for (j=0; j<n; j++)
         img_2[n-1-i][n-1-j] = img[i][j];

   if (contrast(n, img_2, img_transform)) {
      return 0;
   }

   return 2;
}
int method_3(int n, char img[n][n], char img_transform[n][n])   //判断是否是方法三转换(逆转90°)
{
   int i, j;
   char img_2[n][n];
   for (i=0; i<n; i++)  //将原图转换
      for (j=0; j<n; j++)
         img_2[n-1-j][i] = img[i][j];

   if (contrast(n, img_2, img_transform)) {
      return 0;
   }

   return 3;
}
int method_4(int n, char img[n][n], char img_transform[n][n])   //判断是否是方法四转换(y轴对称--镜像反转)
{
   int i, j;
   char img_2[n][n];
   for (i=0; i<n; i++)  //将原图转换
      for (j=0; j<n; j++)
         img_2[i][n-1-j] = img[i][j];

   if (contrast(n, img_2, img_transform)) {
      return 0;
   }

   return 4;
}
int method_5(int n, char img[n][n], char img_transform[n][n])   //判断是否是方法五转换(组合:先镜像翻转,再进行1~3中一次转换)
{
   int i, j;
   char img_2[n][n];
   for (i=0; i<n; i++)  //将原图镜像翻转转换
      for (j=0; j<n; j++)
         img_2[i][n-1-j] = img[i][j];
   if (method_1(n, img_2, img_transform))
      return 5;
   else if (method_2(n, img_2, img_transform))
      return 5;
   else if (method_3(n, img_2, img_transform))
      return 5;
   else
      return 0;
}
int method_6(int n, char img[n][n], char img_transform[n][n])   //判断是否是方法六转换(不改变)
{
   int i, j;
   for (i=0; i<n; i++)
      for (j=0; j<n; j++)
         if(img[i][j] != img_transform[i][j])
            return 0;

   return 6;
}

输入样例(题目下载)

5
-@@@-
-@@--
-@---
-----
-----
-----
----@
---@@
--@@@
-----

输出样例(题目下载)

5

我的vscode上运行的结果

我的vscode上运行的结果

2024/6/27 19:48
加载中...