poj 1102

来源:互联网 发布:西游记后传知乎 编辑:程序博客网 时间:2024/06/05 19:39

这道题主要是把数字转化位图,每位数的转换方法的组成及标号为:

   0

   --

1|  |2

4|  |5

   _

   6   //中间那横为3 

先把整个输出表初始化,然后再改变有内容的地方的值。注意关键点的位置,其他就根据格式来定。

#include<stdio.h>

int con[10][7]={1,1,1,0,1,1,1,    0,0,1,0,0,1,0,    1,0,1,1,1,0,1,  1,0,1,1,0,1,1,   0,1,1,1,0,1,0,   1,1,0,1,0,1,1,      1,1,0,1,1,1,1,     1,0,1,0,0,1,0,  1,1,1,1,1,1,1,      1,1,1,1,0,1,1};
int main()
{
bool output_f=0;
int s,i,j,k,row,col;
int num[20],num_i;//num_i为位数
char ch1,ch2;
char map[1000][1000];
while(scanf("%d%c%c",&s,&ch1,&ch2)&&s!=0)
{
num_i=0;
num[num_i++]=ch2-'0';
while(scanf("%c",&ch2)&&ch2!='\n')
{
num[num_i++]=ch2-'0';
}
for(i=0;i<2*s+3;i++)//初始化
for(j=0;j<(s+3)*num_i-1;j++)
map[i][j]=' ';
int x=0,y=0;
for(i=0;i<num_i;i++)//num_i位数
{
x=0,y=i*(s+3);//每一横一竖都有一个特殊的点,就是(x,y);
for(j=0;j<7;j++)//七个位置
if(con[num[i]][j])
{
if(j%3==0)
{
row=x+(s+1)*j/3;
col=y;
}
else
{
row=(int(j/3))*(s+1)+x;
if(j%3==1)
col=y;
else
col=y+(s+1);
}
for(k=0;k<s;k++)
{
if(j%3==0)//0,3,6时,列变
{
col++;
map[row][col]='-';
}
else//1,2,4,5时,行变
{
row++;
map[row][col]='|';
}
}
}
}
if(output_f)
printf("\n");
else
output_f=1;
for(i=0;i<2*s+3;i++)
{
for(j=0;j<(s+3)*num_i-1;j++)
printf("%c",map[i][j]);
printf("\n");
}
}
return 0;
}
原创粉丝点击