思路:
建立一个三维数组
将需要输出的数字存储在字符里面,需要使用时s[i]-'0’来判断输出
if(j!=n-1)cout<<’.’;
易错:三维数组最后按规格输出:换行和.
#include<iostream>
using namespace std;
char a[10][5][3] =//a[i][j][k]表示第i个数字的第j行的第k列
{
{//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;
char s[110];
int main()
{
cin >> n;
for (int i = 0; i < n; i++)cin >> s[i];
for (int i = 0; i < 5; i++)
{//枚举每一行
for (int j = 0; j < n; j++)
{//枚举每一个数字
for (int k = 0; k < 3; k++)
{//枚举每个数字的列
cout << a[s[j] - '0'][i][k];
}
if (j != n - 1) cout << '.';//易错:如果最后一列,就不需要打印'.'
}
cout << endl;//易错:换行
}
}
另一思路
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
char a[10000];
string ans[10];
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]=='1')
{
ans[1]+="..X.";
ans[2]+="..X.";
ans[3]+="..X.";
ans[4]+="..X.";
ans[5]+="..X.";
}
if(a[i]=='2')
{
ans[1]+="XXX.";
ans[2]+="..X.";
ans[3]+="XXX.";
ans[4]+="X...";
ans[5]+="XXX.";
}
if(a[i]=='3')
{
ans[1]+="XXX.";
ans[2]+="..X.";
ans[3]+="XXX.";
ans[4]+="..X.";
ans[5]+="XXX.";
}
if(a[i]=='4')
{
ans[1]+="X.X.";
ans[2]+="X.X.";
ans[3]+="XXX.";
ans[4]+="..X.";
ans[5]+="..X.";
}
if(a[i]=='5')
{
ans[1]+="XXX.";
ans[2]+="X...";
ans[3]+="XXX.";
ans[4]+="..X.";
ans[5]+="XXX.";
}
if(a[i]=='6')
{
ans[1]+="XXX.";
ans[2]+="X...";
ans[3]+="XXX.";
ans[4]+="X.X.";
ans[5]+="XXX.";
}
if(a[i]=='7')
{
ans[1]+="XXX.";
ans[2]+="..X.";
ans[3]+="..X.";
ans[4]+="..X.";
ans[5]+="..X.";
}
if(a[i]=='8')
{
ans[1]+="XXX.";
ans[2]+="X.X.";
ans[3]+="XXX.";
ans[4]+="X.X.";
ans[5]+="XXX.";
}
if(a[i]=='9')
{
ans[1]+="XXX.";
ans[2]+="X.X.";
ans[3]+="XXX.";
ans[4]+="..X.";
ans[5]+="XXX.";
}
if(a[i]=='0')
{
ans[1]+="XXX.";
ans[2]+="X.X.";
ans[3]+="X.X.";
ans[4]+="X.X.";
ans[5]+="XXX.";
}
}
for(int i=1;i<=5;i++)
{
ans[i]=ans[i].substr(0,ans[i].length()-1);
cout<<ans[i]<<endl;
}
return 0;
}
暴力的思路,就是将显示屏割成 5 行分开操作,每次往后面接上一段就可以了。
唯一可说的可能就是最后的去点操作。substr 函数就是复制字符串操作,其形式为 substr(开始位置,复制多长)。我们将原字符串长度用 length 求出,然后减 1,就相当于将原字符串缩短一位,也就是去掉了最后一位(也就是题中的“ . ” ),从而实现了去点的目的。