pku acm 1099

來源:互聯網
上載者:User

解題報告:

  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] = ' ';elsesice[si+1][sj] = ' ';}else{if (sice[si-3][sj] == '|')sice[si-1][sj] = ' ';elsesice[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 <= 11int 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.