一道ACM题的程序(C语言)

来源:互联网 发布:动漫我们的存在知乎 编辑:程序博客网 时间:2024/04/29 18:01

Sample Input

2
0 1
1 0
4
0 1 0 0
1 -1 0 1
0 0 1 0
0 1 0 0
0

Sample Output

Case 1:
 
***********
*H-O H-O-H*
*  |      *
*  H   H  *
*      |  *
*H-O-H O-H*
***********
 
Case 2:
 
*******************
*H-O H-O-H O-H O-H*
*  |       |   |  *
*  H   H   H   H  *
*      |          *
*H-O-H O H-O H-O-H*
*      |   |      *
*  H   H   H   H  *
*  |           |  *
*H-O H-O H-O-H O-H*
*      |          *
*  H   H   H   H  *
*  |       |   |  *
*H-O H-O-H O-H O-H*
*******************

 

/*源代码*/

 #define N 100
#include "stdio.h"
int rows,cols;/*rows为输出图形的列数,cols为输出图形的行数*/

void h2o(int a[N][N],int n,char b[N][N])
{/*将a中的数字转化为相应的图形存于b中,n为行下标*/
 int i,j,k,l;
 k=-4;
 for(i=0;i<cols;i++)            /*初始化输出数组*/
  for(j=0;j<rows;j++)
   b[i][j]=' ';
 for(i=0;i<n;i++)
 {
  k+=4;l=2;
  for(j=0;j<n;j++)
  {
   switch(a[i][j])
   {
    case 1: b[k][l]='O';
            b[k][l-1]='-';
            b[k][l-2]='H';
     b[k][l+1]='-';
     b[k][l+2]='H';
     l+=4;
     break;
    case -1:b[k][l]='O';
     b[k-1][l]='|';
     b[k-2][l]='H';
     b[k+1][l]='|';
     b[k+2][l]='H';
     l+=4;
     break;
    case 0:
     if(i==0&&j==0)
     {
      b[k][l]='O';
      b[k][l-1]='-';
      b[k][l-2]='H';
      b[k+1][l]='|';
      b[k+2][l]='H';
      l+=4;
      break;
     }
     if(i==0&&j==n-1)
     {
      b[k][l]='O';
      b[k][l+1]='-';
      b[k][l+2]='H';
      b[k+1][l]='|';
      b[k+2][l]='H';
      break;
     }
     if(i==n-1&&j==0)
     {
      b[k][l]='O';
      b[k][l-1]='-';
      b[k][l-2]='H';
      b[k-1][l]='|';
      b[k-2][l]='H';
      l+=4;
      break;
     }
     if(i==n-1&&j==n-1)
     {
      b[k][l]='O';
      b[k][l+1]='-';
      b[k][l+2]='H';
      b[k-1][l]='|';
      b[k-2][l]='H';
      break;
     }
     if(i==0&&j>0&&j<n-1)
     {
      if(b[k][l-2]=='H')
      {
       b[k][l]='O';
       b[k][l+1]='-';
       b[k][l+2]='H';
       b[k+1][l]='|';
       b[k+2][l]='H';
       l+=4;
       break;
      }
      else
      {
       b[k][l]='O';
       b[k][l-1]='-';
       b[k][l-2]='H';
       b[k+1][l]='|';
       b[k+2][l]='H';
       l+=4;
       break;
      }
     }
     if(j==0&&i>0&&i<n-1)
     {
      if(b[k-3][l]=='|')
      {
       b[k][l]='O';
       b[k][l-1]='-';
       b[k][l-2]='H';
       b[k+1][l]='|';
       b[k+2][l]='H';
       l+=4;
       break;
      }
      else
      {
       b[k][l]='O';
       b[k][l-1]='-';
       b[k][l-2]='H';
       b[k-1][l]='|';
       b[k-2][l]='H';
       l+=4;
       break;
      }
     }
     if(j!=0&&i>0&&i<n&&b[k-3][l]=='|'&&b[k][l-2]=='H')
     {
      b[k][l]='O';
      b[k][l+1]='-';
      b[k][l+2]='H';
      b[k+1][l]='|';
      b[k+2][l]='H';
      l+=4;
      break;
     }
     if(j!=0&&i>0&&i<n&&b[k-3][l]=='|'&&b[k][l-2]!='H')
     {
      b[k][l]='O';
      b[k][l-1]='-';
      b[k][l-2]='H';
      b[k+1][l]='|';
      b[k+2][l]='H';
      l+=4;
      break;
     }
     if(j!=0&&i>0&&i<n&&b[k-3][l]!='|'&&b[k][l-2]=='H')
     {
      b[k][l]='O';
      b[k-1][l]='|';
      b[k-2][l]='H';
      b[k][l+1]='-';
      b[k][l+2]='H';
      l+=4;
      break;
     }
     if(j!=0&&i>0&&i<n&&b[k-3][l]!='|'&&b[k][l-2]!='H')
     {
      b[k][l]='O';
      b[k-1][l]='|';
      b[k-2][l]='H';
      b[k][l-1]='-';
      b[k][l-2]='H';
      l+=4;
      break;
     }
   }
  }
 }
}

main()
{
 int i,j,n;
 int a[N][N];
 char b[N][N];
 scanf("%d",&n);
 rows=(n-1)*3+n+4;
 cols=(n-1)*3+n;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   scanf("%d",&a[i][j]);
 h2o(a,n,b);
 for(i=0;i<rows+2;i++)
  printf("*");
 printf("/n");
 for(i=0;i<cols;i++)
 {
  printf("*");
  for(j=0;j<rows;j++)
   printf("%c",b[i][j]);
  printf("*/n");
 }
 for(i=0;i<rows+2;i++)
  printf("*");
 printf("/n");
}

原创粉丝点击