poj 1099解题报告

来源:互联网 发布:linux shell脚本 pause 编辑:程序博客网 时间:2024/05/03 21:30

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

#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;
}


原创粉丝点击