液晶屏上,每个阿拉伯数字都是可以显示成 3 × 5 3\times5 3×5 的点阵的(其中 X
表示亮点,.
表示暗点)。现在给出数字位数(不超过 100 100 100)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。
第一行输入一个正整数 n n n,表示数字的位数。
第二行输入一个长度为 n n n 的自然数。
输出五行,表示显示屏上的数字。
该题考查了三维数组的使用,值得一提的是 ,读懂题意很重要,每一个数字对应一个五行三列的矩阵图形,且数字之间相隔一列,这里应该是一列.
第一次我使用了c语言通过了测试案例,但在编译平台却没有通过,本人觉得应该是编译平台是在LINUX上运行的测试代码,与我在Windows上运行结果有差异,所以 通过不了,然后我决定换Java来写这道题,就没有问题了,因为Java本身就是设计优势就是跨平台的高级语言。
首先定义一个三维字符数组,代表第i个数字k行j列,这样就是表示了数字和图案之间的对应关系,
键入数字个数,将数字串键入到字符数组中,
写一个三重循环:先打印列,再打印每个数字的所有列,在每个数字末尾列的后面打印小数点,最后一个数字除外,这里需要做一个判断,打印完所有数字的第某行的所有列之后,再打印所有行,再换行。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//定义一个字符串数组,表示第i个数字j行k列
char[][][] arr = {
{//0
{'X', 'X', 'X'},
{'X', '.', 'X'},
{'X', '.', 'X'},
{'X', '.', 'X'},
{'X', 'X', 'X'}
},
{//1
{'.', '.', 'X'},
{'.', '.', 'X'},
{'.', '.', 'X'},
{'.', '.', 'X'},
{'.', '.', 'X'}
},
{//2
{'X', 'X', 'X'},
{'.', '.', 'X'},
{'X', 'X', 'X'},
{'X', '.', '.'},
{'X', 'X', 'X'}
},
{//3
{'X', 'X', 'X'},
{'.', '.', 'X'},
{'X', 'X', 'X'},
{'.', '.', 'X'},
{'X', 'X', 'X'}
},
{//4
{'X', '.', 'X'},
{'X', '.', 'X'},
{'X', 'X', 'X'},
{'.', '.', 'X'},
{'.', '.', 'X'},
},
{//5
{'X', 'X', 'X'},
{'X', '.', '.'},
{'X', 'X', 'X'},
{'.', '.', 'X'},
{'X', 'X', 'X'}
},
{//6
{'X', 'X', 'X'},
{'X', '.', '.'},
{'X', 'X', 'X'},
{'X', '.', 'X'},
{'X', 'X', 'X'}
},
{//7
{'X', 'X', 'X'},
{'.', '.', 'X'},
{'.', '.', 'X'},
{'.', '.', 'X'},
{'.', '.', 'X'}
},
{//8
{'X', 'X', 'X'},
{'X', '.', 'X'},
{'X', 'X', 'X'},
{'X', '.', 'X'},
{'X', 'X', 'X'}
},
{//9
{'X', 'X', 'X'},
{'X', '.', 'X'},
{'X', 'X', 'X'},
{'.', '.', 'X'},
{'X', 'X', 'X'}
}
};
int n;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
char a;
//将一串数字存入数组
String str = sc.next();
char[] num = str.toCharArray();
//打印行
for (int j = 0; j < 5; ++j) {
//枚举每一个数,打印字符串数字对应元素的第j行的所有列
for (int i = 0; i < n; ++i) {
//打印列
for (int k = 0; k < 3; ++k) {
System.out.print(arr[num[i] - '0'][j][k]);
}
//每个数字之间打印一列. 最后一行除外
if (i != n - 1) {
System.out.print(".");
}
}
System.out.println();
}
}
}