# 【深基5.例10】显示屏
## 题目描述
液晶屏上,每个阿拉伯数字都是可以显示成 $3\times5$ 的点阵的(其中 `X` 表示亮点,`.` 表示暗点)。现在给出数字位数(不超过 $100$)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。
## 输入格式
第一行输入一个正整数 $n$,表示数字的位数。
第二行输入一个长度为 $n$ 的自然数。
## 输出格式
输出五行,表示显示屏上的数字。
## 样例 #1
### 样例输入 #1
```
10
0123456789
```
### 样例输出 #1
```
XXX...X.XXX.XXX.X.X.XXX.XXX.XXX.XXX.XXX X.X...X...X...X.X.X.X...X.....X.X.X.X.X X.X...X.XXX.XXX.XXX.XXX.XXX...X.XXX.XXX X.X...X.X.....X...X...X.X.X...X.X.X...X XXX...X.XXX.XXX...X.XXX.XXX...X.XXX.XXX
```
1.实现过程
根据图像规律,找出数组列数与数字位数关系,确定数组的大小。
确定数组大小之后,将数组全部赋值为’X’。另开一个新数组,将要显示的数字存
入数组。设立循环,按照每个数字,将对应位置改为“.”,得到数字的形状;
2.代码部分
#include <stdio.h>
int main ()
{
int i,j,n,t,x,k;
char ch;
char a[5][400];
char b[100];
scanf("%d",&n);
t = 4*n - 1; //先确定数组大小;
getchar(); for(i=0;i<5;i++){ //确定数组大小之后,将数组全部赋值为‘X’;
for(j=0;j<t;j++){
a[i][j]='X';
}
}
for(i=0;i<n;i++){
b[i] = getchar(); //将输入的数字存入另一个新数组;
}
for(i=0;i<n;i++){
x = i*4; //观察显示屏数字规律,每个数字都从第4*i列开始
if(x!=0){
for(int item=0;item<5;item++){
a[item][x-1]='.'; //第一个数字之后,每次开始前打印一列‘.’;
}
} //根据数字形状,将对应位置的“X”变为“.”得到数字形状;
if(b[i]=='0'){
a[1][x+1]='.'; a[2][x+1]='.'; a[3][x+1]='.';
}
else if(b[i]=='1'){
for(j=0;j<5;j++){
for(k=x;k<x+2;k++){
a[j][k]='.';
}
}
}
else if(b[i]=='2'){
a[1][x]='.'; a[1][x+1]='.'; a[3][x+1]='.'; a[3][x+2]='.';
}
else if(b[i]=='3'){
a[1][x]='.'; a[1][x+1]='.'; a[3][x]='.'; a[3][x+1]='.';
}
else if(b[i]=='4'){
a[3][x]='.'; a[3][x+1]='.'; a[4][x]='.'; a[4][x+1]='.'; a[0][x+1]='.'; a[1][x+1]='.';
}
else if(b[i]=='5'){
a[1][x+1]='.'; a[1][x+2]='.'; a[3][x]='.'; a[3][x+1]='.';
}
else if(b[i]=='6'){
a[1][x+1]='.'; a[1][x+2]='.'; a[3][x+1]='.';
}
else if(b[i]=='7'){
for(j=1;j<5;j++){
for(k=x;k<x+2;k++){
a[j][k]='.';
}
}
}
else if(b[i]=='8'){
a[1][x+1]='.'; a[3][x+1]='.';
}
else if(b[i]=='9'){
a[1][x+1]='.'; a[3][x]='.'; a[3][x+1]='.';
}
}
for(i=0;i<5;i++){ //输出数组
for(j=0;j<t;j++){
printf("%c",a[i][j]);
if(j==t-1){
printf("\n");
}
}
}
return 0;
}
3.关于提交错误
直接提交这份源代码洛谷会显示全WA,原因如下
只需要在getchar()后再添加一个getchar()即可AC