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;
}
#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;
}
相关文章推荐
- poj解题报告——2262
- POJ 2478 Farey Sequence 解题报告(欧拉函数 筛求法)
- POJ 2488解题报告
- POJ 2012题Joseph解题报告
- POJ-3009 Curling 2.0 解题报告
- POJ 2480 Longge's problem 解题报告(欧拉函数 + 积性函数)
- 【原创】poj ----- 2376 Cleaning Shifts 解题报告
- poj 1151-Atlantis线段树求矩形面积并解题报告
- POJ 1363 解题报告
- POJ2255 解题报告
- POJ 2367 拓扑排序 解题报告
- poj1328解题报告.
- POJ1068 解题报告
- poj解题报告——poj1006
- POJ 3580 较复杂的Splay区间维护题解题报告
- POJ 3278解题报告(C语言版)//Catch That Cow
- POJ 2656 解题报告
- poj解题报告——1970
- poj 1182 食物链(并查集)解题报告(转)
- POJ 1002解题报告