模拟 UVa 706 LC-Display
2012-12-04 13:05
330 查看
题目链接:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=647
题目意思:
将一个整数用给定的‘-’,‘|’的规则给表示出来。
规则:用s个“-”表示水平线段,s个“|”表示竖直线段。每一个阿拉伯数字占用s+2列和2s+3行。注意那些数字中的空白之处要填上空格,并且两个数字之间必须有一个空列。在每一个整数后面输出一个空行。
解题思路:
大体上分成两部分,水平部分和竖直部分。
代码:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=647
题目意思:
将一个整数用给定的‘-’,‘|’的规则给表示出来。
规则:用s个“-”表示水平线段,s个“|”表示竖直线段。每一个阿拉伯数字占用s+2列和2s+3行。注意那些数字中的空白之处要填上空格,并且两个数字之间必须有一个空列。在每一个整数后面输出一个空行。
解题思路:
大体上分成两部分,水平部分和竖直部分。
代码:
#include<iostream> #include<cmath> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<algorithm> #include<vector> #include<map> #define eps 1e-6 #define INF (1<<20) #define PI acos(-1.0) using namespace std; char ans[30][150],temp[20]; int s; void solve(int i,int len) { int start=(i-1)*(s+3)+1; //注意这个数开始的位置 switch(temp[i-1]) { case '1':for(int j=1;j<=s;j++) ans[j+1][start+s+1]=ans[j+1+s+1][start+s+1]='|'; break; case '2':for(int j=1;j<=s;j++) ans[1][j+start]=ans[s+2][j+start]=ans[2*s+3][j+start]='-'; for(int j=1;j<=s;j++) ans[j+1][start+s+1]=ans[j+1+s+1][start]='|'; break; case '3':for(int j=1;j<=s;j++) ans[1][j+start]=ans[s+2][j+start]=ans[2*s+3][j+start]='-'; for(int j=1;j<=s;j++) ans[j+1][start+s+1]=ans[j+1+s+1][start+s+1]='|'; break; case '4':for(int j=1;j<=s;j++) ans[2+s][start+j]='-'; for(int j=1;j<=s;j++) ans[j+1][start]=ans[j+1][start+s+1]=ans[j+s+2][start+s+1]='|'; break; case '5':for(int j=1;j<=s;j++) ans[1][j+start]=ans[s+2][j+start]=ans[2*s+3][j+start]='-'; for(int j=1;j<=s;j++) ans[j+1][start]=ans[j+1+s+1][start+s+1]='|'; break; case '6':for(int j=1;j<=s;j++) ans[1][j+start]=ans[s+2][j+start]=ans[2*s+3][j+start]='-'; for(int j=1;j<=s;j++) ans[j+1][start]=ans[j+s+2][start]=ans[j+s+2][start+s+1]='|'; break; case '7':for(int j=1;j<=s;j++) ans[1][j+start]='-'; for(int j=1;j<=s;j++) ans[j+1][start+s+1]=ans[j+1+s+1][start+s+1]='|'; break; case '8':for(int j=1;j<=s;j++) ans[1][j+start]=ans[s+2][j+start]=ans[2*s+3][j+start]='-'; for(int j=1;j<=s;j++) ans[j+1][start]=ans[j+1][start+s+1]=ans[j+s+2][start]=ans[j+s+2][start+s+1]='|'; break; case '9':for(int j=1;j<=s;j++) ans[1][j+start]=ans[s+2][j+start]=ans[2*s+3][j+start]='-'; for(int j=1;j<=s;j++) ans[j+1][start]=ans[j+1][start+s+1]=ans[j+s+2][start+s+1]='|'; break; case '0':for(int j=1;j<=s;j++) ans[1][j+start]=ans[2*s+3][j+start]='-'; for(int j=1;j<=s;j++) ans[j+1][start]=ans[j+1][start+s+1]=ans[j+s+2][start]=ans[j+s+2][start+s+1]='|'; break; } return ; } void init(int len) { int sumcol=(s+3)*len; for(int i=1;i<=(2*s+3);i++) for(int j=0;j<sumcol;j++) ans[i][j]=' '; //初始化为全部为空 for(int i=1;i<=(2*s+3);i++) ans[i][sumcol]='\0'; //最后一列为‘\0'作为输出字符串的结束 return ; } int main() { while(scanf("%d %s",&s,temp)!=EOF) { if(s==0&&*temp=='0') break; int len=strlen(temp); init(len); //初始化 for(int i=1;i<=len;i++) solve(i,len); //对每一个数字进行处理 for(int i=1;i<=2*s+3;i++) printf("%s\n",ans[i]+1); //一行一行的输出,每行从1开始 putchar('\n'); } return 0; }
相关文章推荐
- uva 706 LC-Display
- uva706 LC-Display
- UVa 706 / POJ 1102 LCD Display (模拟)
- LC-Display(UVa706)
- UVA 706 LC-Display
- UVa 706 & ZOJ 1146 LC-Display
- UVa Problem Solution: 706 - LC-Display
- UVa 706 LC-Display
- UVa Problem 706 LC-Display (液晶显示屏)
- UVA 706 - LC-Display
- UVa Problem 706 LC-Display (液晶显示屏)
- uva 706 LC-Display
- UVALive5642 UVA706 HDU1332 POJ1102 LC-Display【打印图案】
- UVA 706 LCD Display 液晶显示屏 (字符串模拟)
- UVa 706 Problem: LC-Display (PC 110104)
- uva 706 LCD Display
- UVa——110104 LC-Display(图形输出)
- poj_1102_LC-Display(数段码模拟)
- UVa 706 - LCD Display
- poj 1102 LC-Display(模拟)