现在的位置: 首页 > 综合 > 正文

zju1146LC-Display

2013年08月03日 ⁄ 综合 ⁄ 共 2294字 ⁄ 字号 评论关闭

题目链接:
zju1146
    pku1102

题目大意:

 s, n (1 <= s <= 10, 0 <= n <= 99 999 999),
每次输入s,n,,将n输出成LC样式,"-" 表示横向段,  "|"表示纵向段每个数字占 s+2 列  2s+3 行.
两个数字之间有一空列.在每个数后输出一空行.

解题思路:

将每个数字的7段是否要显示用一个数组保存起来.然后对于每个数,先处理顶部行,
在输出中间s行,等等。对于每行,又由对每个数字的输出和空格组成。
对那3行,先输出一个空格,然后根据数组看是输出s个"-"还是空格,再输出一个空格。
对于那2s行,先根据数组看是输出空格还是竖线,再输出s个空格,等等。

代码:

// 代码一 
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
bool map[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 };
void printDigit(bool left,bool mid,bool right,int s)//处理每一行的数字输出
{	printf("%c",left?'|':' ');
	for(int i=0;i<s;i++)printf("%c",mid?'-':' ');
	printf("%c",right?'|':' ');
}

int main(int argc, char *argv[])
{
	int s,flag=0;
	char n[20];
	bool left,mid,right;
	while(scanf("%d%s",&s,n)==2&&s)
	{	int len=strlen(n);
		for(int i=0;i<len;i++) //最顶端一行
		{	printDigit(0,map[n[i]-'0'][0],0,s);
			if(i==len-1)printf("\n");
			else printf(" ");
		}
		for(int j=0;j<s;j++)//上边s行
		{
			for(int i=0;i<len;i++)
			{	printDigit(map[n[i]-'0'][1],0,map[n[i]-'0'][2],s);
				if(i==len-1)printf("\n");
				else printf(" ");
			}
		}
		for(int i=0;i<len;i++)//中间行
		{	printDigit(0,map[n[i]-'0'][3],0,s);
			if(i==len-1)printf("\n");
			else printf(" ");
		}
		for(int j=0;j<s;j++)//下边s行
		{
			for(int i=0;i<len;i++)
			{	printDigit(map[n[i]-'0'][4],0,map[n[i]-'0'][5],s);
				if(i==len-1)printf("\n");
				else printf(" ");
			}
		}
		for(int i=0;i<len;i++)//底行
		{	printDigit(0,map[n[i]-'0'][6],0,s);
			if(i==len-1)printf("\n");
			else printf(" ");
		}
		printf("\n");
	}
	return 0;
}
// 代码二 
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
bool map[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 };
void printDigit(bool left,bool mid,bool right,int s) //输出每个数字的一行
{	printf("%c",left?'|':' ');
	for(int i=0;i<s;i++)printf("%c",mid?'-':' ');
	printf("%c",right?'|':' ');
}

void printRow(bool isH,int c,int s,char* n,int len)//输出一行
{
	for(int i=0;i<len;i++)
	{	if(1==isH)printDigit(0,map[n[i]-'0'][c],0,s);
		else printDigit(map[n[i]-'0'][c],0,map[n[i]-'0'][c+1],s);
		if(i==len-1)printf("\n");
		else printf(" ");
	}
}
int main(int argc, char *argv[])
{
	int s,flag=0;
	char n[20];
	bool left,mid,right;
	while(scanf("%d%s",&s,n)==2&&s)
	{	int len=strlen(n);
		printRow(1,0,s,n,len);
		for(int j=0;j<s;j++)
			printRow(0,1,s,n,len);
		printRow(1,3,s,n,len);
		for(int j=0;j<s;j++)
			printRow(0,4,s,n,len);
		printRow(1,6,s,n,len);
		printf("\n");
	}
	return 0;
}

抱歉!评论已关闭.