思路:判断m的每一位
分别显示0~9
P5730 【深基5.例10】显示屏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P5730
#include<iostream>
using namespace std;
char ans[6][410];
//声明数字显示效果的函数
//另一种解决倒序显示的方法:
//定义函数时,镜面显示
void num0(int);
void num1(int);
void num2(int);
void num3(int);
void num4(int);
void num5(int);
void num6(int);
void num7(int);
void num8(int);
void num9(int);
int main() {
int n, a = 1; //a记录列数
cin >> n;
//全部填充字符 '.'
for (int k = 1; k <= 5; k++) {
for (int i = 1; i <= 4 * n - 1; i++) //n个数需要的列数
ans[k][i] = '.';
}
//直接存入会低尾=>高位,倒序输出
//若如下创造m的回文数会丢失首位0和最后面的0
/*
int sum = 0;
while (m) {
sum = sum*10 + m % 10;
m /= 10; //!
}
*/
//创建数组储存m回文数的每一位
//用 char类型数组分别储存m的每一位储存的是0~9的ascii码
//下面用求余存储n的每一位,数值过大时,会导致 b m 溢出
/*
int sum[110]{ 0 };
for (int i = n; i; i--) {
long int b = m % 10;
sum[i] = b;
m /= 10;
}
*/
char sum[110];
for (int i = 1; i <= n; i++) {
cin >> sum[i];
}
for (int i = 1; i <= n; i++, a += 4)//数之间有一列 '.'
switch (sum[i]-'0') { // -'0'
case 0:num0(a); break;
case 1:num1(a); break;
case 2:num2(a); break;
case 3:num3(a); break;
case 4:num4(a); break;
case 5:num5(a); break;
case 6:num6(a); break;
case 7:num7(a); break;
case 8:num8(a); break;
case 9:num9(a); break;
}
//输出
for (int i = 1; i <= 5; i++) {
for (int k = 1; k <= 4 * n - 1; k++)
cout << ans[i][k];
cout << endl;
}
return 0;
}
void num0(int a) {
ans[1][a] = 'X';
ans[1][a + 1] = 'X';
ans[1][a + 2] = 'X';
ans[2][a] = 'X';
ans[2][a + 2] = 'X';
ans[3][a] = 'X';
ans[3][a + 2] = 'X';
ans[4][a] = 'X';
ans[4][a + 2] = 'X';
ans[5][a] = 'X';
ans[5][a + 1] = 'X';
ans[5][a + 2] = 'X';
}
void num1(int a) {
for (int i = 1; i <= 5; i++)
ans[i][a + 2] = 'X';
}
void num2(int a) {
for (int i = 1; i <= 5; i += 2) {
ans[i][a] = 'X';
ans[i][a + 1] = 'X';
ans[i][a + 2] = 'X';
}
ans[2][a + 2] = 'X';
ans[4][a] = 'X';
}
void num3(int a) {
for (int i = 1; i <= 5; i += 2) {
ans[i][a] = 'X';
ans[i][a + 1] = 'X';
ans[i][a + 2] = 'X';
}
ans[2][a + 2] = 'X';
ans[4][a + 2] = 'X';
}
void num4(int a) {
ans[1][a] = 'X';
ans[1][a + 2] = 'X';
ans[2][a] = 'X';
ans[2][a + 2] = 'X';
ans[3][a] = 'X';
ans[3][a + 1] = 'X';
ans[3][a + 2] = 'X';
ans[4][a + 2] = 'X';
ans[5][a + 2] = 'X';
}
void num5(int a) {
for (int i = 1; i <= 5; i += 2) {
ans[i][a] = 'X';
ans[i][a + 1] = 'X';
ans[i][a + 2] = 'X';
}
ans[2][a] = 'X';
ans[4][a + 2] = 'X';
}
void num6(int a) {
for (int i = 1; i <= 5; i += 2) {
ans[i][a] = 'X';
ans[i][a + 1] = 'X';
ans[i][a + 2] = 'X';
}
ans[2][a] = 'X';
ans[4][a] = 'X';
ans[4][a + 2] = 'X';
}
void num7(int a) {
ans[1][a] = 'X';
ans[1][a + 1] = 'X';
ans[1][a + 2] = 'X';
ans[2][a + 2] = 'X';
ans[3][a + 2] = 'X';
ans[4][a + 2] = 'X';
ans[5][a + 2] = 'X';
}
void num8(int a) {
for (int i = 1; i <= 5; i += 2) {
ans[i][a] = 'X';
ans[i][a + 1] = 'X';
ans[i][a + 2] = 'X';
}
ans[2][a] = 'X';
ans[2][a + 2] = 'X';
ans[4][a] = 'X';
ans[4][a + 2] = 'X';
}
void num9(int a) {
for (int i = 1; i <= 5; i += 2) {
ans[i][a] = 'X';
ans[i][a + 1] = 'X';
ans[i][a + 2] = 'X';
}
ans[2][a] = 'X';
ans[2][a + 2] = 'X';
ans[4][a + 2] = 'X';
}
另一种显示思路:
用数组存储0~9的显示结果
单个数显示
#include<iostream>
using namespace std;
int main() {
char ans[10][5][3]{
{
'X','X','X',
'X','.','X',
'X','.','X',
'X','.','X',
'X','X','X'
},
{
'.','.','X',
'.','.','X',
'.','.','X',
'.','.','X',
'.','.','X'
},
{
'X','X','X',
'.','.','X',
'X','X','X',
'X','.','.',
'X','X','X'
},
{
'X','X','X',
'.','.','X',
'X','X','X',
'.','.','X',
'X','X','X'
},
{
'X','.','X',
'X','.','X',
'X','X','X',
'.','.','X',
'.','.','X'
},
{
'X','X','X',
'X','.','.',
'X','X','X',
'.','.','X',
'X','X','X'
},
{
'X','X','X',
'X','.','.',
'X','X','X',
'X','.','X',
'X','X','X'
},
{
'X','X','X',
'.','.','X',
'.','.','X',
'.','.','X',
'.','.','X'
},
{
'X','X','X',
'X','.','X',
'X','X','X',
'X','.','X',
'X','X','X'
},
{
'X','X','X',
'X','.','X',
'X','X','X',
'.','.','X',
'X','X','X'
}
};
int n;
cin >> n;
for (int i = 0; i < 5; i++) {
for (int k = 0; k < 3; k++)
cout << ans[n][i][k];
cout << endl;
}
return 0;
}
详见: