//算法基础与在线实践是错误的;
#include<cstdio>
#include<stdlib.h>
#include<iostream>
using namespace std;
//c++注意加上这句话;
int main(){
int s, i, j, k;
char num[11];
char n1[11] = {"- -- -----"};//笔画1 被数字0 2 3 5 6 7 8 9覆盖
char n2[11] = {"| ||| ||"};//笔画2 被数字0 4 5 6 8 9覆盖
char n3[11] = {"||||| |||"};//笔画3 被数字0 1 2 3 4 7 8 9覆盖
char n4[11] = {" ----- --"};//笔画4 被数字2 3 4 5 6 8 9覆盖
char n5[11] = {"| | | | "};//笔画5 被数字0 2 6 8覆盖
char n6[11] = {"|| |||||||"};//笔画6 被数字0 1 3 4 5 6 7 8 9覆盖
char n7[11] = {"- -- -- --"};//笔画7 被数字0 2 3 5 6 8 9覆盖
//输入s尺寸和number数字;
cin >> s >> num;
while(s != 0){
/*
这里为了循环输入程序实现,也可以写代码为
while(true)需要break结束循环;
{
scanf("%d",&n);
scanf("%s",num)注意数组的名字就是首地址,也就可以当成数组的地址;
num是一个字符串,处理起来更方便;
if(n==0&&num[0]==0)break;
}
*/
//输出所有数字的笔画1
for(i = 0; num[i] != '\0'; i++){//注意不是num【i】!=0!!!
cout << " ";
for(j = 0; j < s; j++)//一个笔画由s个字符组成,这个s其实也就是限制了字符的尺寸;
cout << n1[num[i]-'0'];//注意这个运算结果是一个整形的变量;
cout << " ";//两个空格,就是s+2的意义所在;
}
cout << endl;
//输出所有数字的笔画2 3 (j<s在两层循环外侧是横与竖的区别)这个横和竖不是-和|,而是真的横笔画和竖笔画;
for(j = 0; j < s; j++){
for(i = 0; num[i] != '\0'; i++){
cout << n2[num[i]-'0'];
for(k = 0; k < s; k++)
cout << " ";
cout << n3[num[i]-'0']<<" ";//通俗点说,就是竖一下,空空空空,再竖一下;
}
cout << endl;
}
//输出所有数字的笔画4
for(i = 0; num[i] != '\0'; i++){
cout << " ";
for(j = 0; j < s; j++)
cout << n4[num[i]-'0'];
cout << " ";//两个空格
}
cout << endl;
//输出所有数字的笔画5 6
for(j = 0; j < s; j++){
for(i = 0; num[i] != '\0'; i++){
cout << n5[num[i]-'0'];
for(k = 0; k < s; k++)
cout << " ";
cout << n6[num[i]-'0']<<" ";
}
cout << endl;
}
//输出所有数字的笔画7
for(i = 0; num[i] != '\0'; i++){
cout << " ";
for(j = 0; j < s; j++)
cout << n7[num[i]-'0'];
cout << " ";//两个空格
}
cout << endl << endl;
cin >> s >> num;
}
//读懂其算法,或者说,读懂其前两笔的意思,就全明白其算法了;
/*最后说一下 system("pause");
首先他要放在return的前面,否则就无法执行了;
当程序看到这句话时,就会说press and key to continue;
*/
system("pause");
return 0;
//这个程序真的挺实际挺好的,这种图案显示方式真的很不错;
}
我可没说完全是原创,但是我认真加了一些自己的批注。
同时,我很推荐下面的文章!写的真的很良心。