您的位置:首页 > 其它

poj 1099解题报告

2012-12-31 15:37 393 查看
//题意不难理解,想了好几天都没有想到比较好的方法,最后看了下他们的解题报告写的,发现自己好水啊~~~

#include<iostream>

#include<string>

#include<stdio.h>

using namespace std;

int n,row,col;

int map[15][15]; //存储01矩阵

char str[50][50]; //存放水分子的排布结构

void input() //输入

{

int i,j;

for(i = 0;i < n;i++)

for(j = 0;j < n;j++)

{

cin>>map[i][j];

}

row = n*4 - 3; //水分子结构图对应的行数

col = n*4 + 1; //水分子结构对应的列数

for(i = 0;i < row;i++) //str数组初始化

for(j = 0;j < col;j++)

str[i][j] = ' ';

}

void solve()

{

int r,c;

int i,j;

for(i = 0;i < n;i++)

{

r = i*4;

c = 2;

for(j = 0;j < n;j++,c += 4)

{

str[r][c] = 'O';

if(map[i][j] == 1) //当水分子结构分布为1的情况时

{

str[r][c-2] = 'H';

str[r][c+2] = 'H';

str[r][c-1] = '-';

str[r][c+1] = '-';

}

else if(map[i][j] == -1) //当水分子结构为-1的情况

{

str[r-2][c] = 'H';

str[r+2][c] = 'H';

str[r-1][c] = '|';

str[r+1][c] = '|';

}

else //水分子结构为0的情况

{

if(str[r][c-2] == 'H') //当左边有H的情况

{

str[r][c+1] = '-';

str[r][c+2] = 'H';

}

else

{

str[r][c-2] = 'H';

str[r][c-1] = '-';

}

if(r < 2 ||(r >= 2 && str[r-2][c] == 'H')) //当为第一行或是上一行已有H

{

str[r+1][c] = '|';

str[r+2][c] = 'H';

}

else

{

str[r-2][c] = 'H';

str[r-1][c] = '|';

}

}

}

}

}

void output() //输出水分子总体结构

{

int i,j;

for(i = 0;i < col+2;i++)

printf("*");

printf("\n");

for(i = 0;i < row;i++)

{

printf("*");

for(j = 0;j < col;j++)

printf("%c",str[i][j]);

printf("*\n");

}

for(i = 0;i < col+2;i++)

printf("*");

printf("\n");

}

int main()

{

int count = 0;

while(cin>>n && n)

{

input();

solve();

printf("Case %d:\n\n",++count);

output();

printf("\n");

}

return 0;

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: