解题报告:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
1 | H | H | ||||||||||||
2 | | | | | ||||||||||||
3 | H | - | O | - | H | - | O | - | H | |||||
4 | | | | | ||||||||||||
5 | H | H | ||||||||||||
6 | | | | | ||||||||||||
7 | H | - | O | - | H | - | O | - | H | |||||
8 | | | | | ||||||||||||
9 | H | H | ||||||||||||
10 | ||||||||||||||
11 | ||||||||||||||
12 | ||||||||||||||
首先按如上这种方式进行表格填充,然后根据输入的矩阵表示来删除'-'和‘|’字符
#include <iostream>
#include <cstdio>
using namespace std;
int asmx[12][12];
char sice[50][50];
void initSice(int m)
{
memset((void*)sice,' ',50*50);
int i,j;
char ch;
for (j = 0; j<=4*m+2; ++j)sice[0][j]='*';
for (j = 0; j<=4*m+2; ++j)sice[4*m+2][j]='*';
for (i = 0; i<=4*m+2; ++i)sice[i][0]='*';
for (i = 0; i<=4*m+2; ++i)sice[i][4*m+2]='*';
for (i=1;i <= 4*m+1; ++i)
{
if (i%4 == 1)ch = 'H';
else if(i%4 == 2 || i%4 == 0)ch = '|';
else //if(i%4 == 3)
ch = 'O';
for (j=3; j<=4*m+1 ; j+=4)
sice[i][j] = ch;
}
for (i=3;i <= 4*m+1; i+=4)
{
for (j=1; j<=4*m+1 ; ++j)
{
if (j%4 == 1)ch = 'H';
else if (j%4==2 || j%4==0)ch = '-';
else ch = 'O';
sice[i][j] = ch;
}
}
}
void decipher(int m)
{
int i,j,si,sj;
int dh,dv;
{//第一行
i = 1;
si = 3;
for (j=1; j<=m; ++j)
{
sj = j*4-1;
if (asmx[i][j])//第一行不可能出现-1
{
sice[si-1][sj] = ' ';
sice[si+1][sj] = ' ';
}
else
{
sice[si-1][sj] = ' ';
if (j == 1)
{
sice[si][sj+1] = ' ';
}
else
{
if (sice[si][sj-3] == '-')
sice[si][sj-1] = ' ';
else//sice[si][sj-3]==''
sice[si][sj+1] = ' ';
}
}
}
}
{//中间行
for (i=2; i<=m-1; ++i)
{
si = i*4-1;
for (j=1; j<=m; ++j)
{
sj = j*4-1;
if (asmx[i][j] == 0)
{
if (j == 1)
{
sice[si][sj+1] = ' ';
if (sice[si-3][sj] == '|')
sice[si-1][sj] = ' ';
else
sice[si+1][sj] = ' ';
}
else
{
if (sice[si-3][sj] == '|')
sice[si-1][sj] = ' ';
else
sice[si+1][sj] = ' ';
if (sice[si][sj-3] == '-')
sice[si][sj-1] = ' ';
else//sice[si][sj-3]==''
sice[si][sj+1] = ' ';
}
}
else if (asmx[i][j] == 1)
{
sice[si-1][sj] = ' ';
sice[si+1][sj] = ' ';
}
else// asmx[i][j] == -1
{
sice[si][sj-1] = ' ';
sice[si][sj+1] = ' ';
}
}
}
}
{//最后一行
i=m;
si = 4*m-1;
for (j=1; j<=m; ++j)
{
sj = j*4-1;
if (asmx[i][j])//最后一行不可能出现-1
{
sice[si-1][sj] = ' ';
sice[si+1][sj] = ' ';
}
else
{
sice[si+1][sj] = ' ';
if (j == 1)
{
sice[si][sj+1] = ' ';
}
else
{
if (sice[si][sj-3] == '-')
sice[si][sj-1] = ' ';
else//sice[si][sj-3]==''
sice[si][sj+1] = ' ';
}
}
}
}
}
void p(int m)
{
int i,j;
for (j=0; j<=4*m+2 ; ++j)
cout<<sice[0][j];
cout<<endl;
for (i=3;i <= 4*m-1; ++i)
{
for (j=0; j<=4*m+2 ; ++j)
cout<<sice[i][j];
cout<<endl;
}
for (j=0; j<=4*m+2 ; ++j)
cout<<sice[4*m+2][j];
cout<<endl;
}
int main()
{
freopen("in.txt","r",stdin);
int m;// m <= 11
int i,j;
int index = 1;
while (cin>>m)
{
if (m == 0)break;
for (i = 1; i <= m; ++i)
for (j = 1; j <= m; ++j)
cin>>asmx[i][j];
initSice(m);
cout<<"Case "<<index++<<":"<<endl<<endl;
decipher(m);
p(m);
cout<<endl;
}
}
测试数据
1
1
2
0 1
1 0
4
0 1 0 0
1 -1 0 1
0 0 1 0
0 1 0 0
5
0 1 0 0 0
1 -1 0 1 0
0 1 0 -1 1
0 0 0 1 0
0 0 1 0 0
0