比较烦人的普及组题: 首先,想到的是打表,虽然比较麻烦,但是好理解,运行速度也比较快! 把从0到9的字符打表如下: char a0[5][3]={{'','',''},{'','.',''},{'','.',''},{'','.',''},{'','',''}}; char a1[5][3]={{'.','.',''},{'.','.',''},{'.','.',''},{'.','.',''},{'.','.',''}}; char a2[5][3]={{'','',''},{'.','.',''},{'','',''},{'','.','.'},{'','',''}}; char a3[5][3]={{'','',''},{'.','.',''},{'','',''},{'.','.',''},{'','',''}}; char a4[5][3]={{'','.',''},{'','.',''},{'','',''},{'.','.',''},{'.','.',''}}; char a5[5][3]={{'','',''},{'','.','.'},{'','',''},{'.','.',''},{'','',''}}; char a6[5][3]={{'','',''},{'','.','.'},{'','',''},{'','.',''},{'','',''}}; char a7[5][3]={{'','',''},{'.','.',''},{'.','.',''},{'.','.',''},{'.','.',''}}; char a8[5][3]={{'','',''},{'','.',''},{'','',''},{'','.',''},{'','',''}}; char a9[5][3]={{'','',''},{'','.',''},{'','',''},{'.','.',''},{'','','*'}}; 其次,定义一个bool型判断函数check(参数1:打表数组,参数2:输入的数组,参数3:y坐标),按照打表的模板,x的范围为0~4,y的范围为1~3来逐个判断。 因为两个数组(打表数组,输入数组)中x坐标的值一样,所以共用一个下标就可以了。 判断函数内需要特别注意的地方就是关于y坐标的变化量问题,因为输入时每组中间都有一个'.'隔开,所以每次判断成功后要将cnt增加4。 最后,通过while循环判断输出,注意一下cnt的范围就可以了。 AC代码:
#include<iostream>
#include<cstring>
using namespace std;
char a0[5][3]={{'*','*','*'},{'*','.','*'},{'*','.','*'},{'*','.','*'},{'*','*','*'}};
char a1[5][3]={{'.','.','*'},{'.','.','*'},{'.','.','*'},{'.','.','*'},{'.','.','*'}};
char a2[5][3]={{'*','*','*'},{'.','.','*'},{'*','*','*'},{'*','.','.'},{'*','*','*'}};
char a3[5][3]={{'*','*','*'},{'.','.','*'},{'*','*','*'},{'.','.','*'},{'*','*','*'}};
char a4[5][3]={{'*','.','*'},{'*','.','*'},{'*','*','*'},{'.','.','*'},{'.','.','*'}};
char a5[5][3]={{'*','*','*'},{'*','.','.'},{'*','*','*'},{'.','.','*'},{'*','*','*'}};
char a6[5][3]={{'*','*','*'},{'*','.','.'},{'*','*','*'},{'*','.','*'},{'*','*','*'}};
char a7[5][3]={{'*','*','*'},{'.','.','*'},{'.','.','*'},{'.','.','*'},{'.','.','*'}};
char a8[5][3]={{'*','*','*'},{'*','.','*'},{'*','*','*'},{'*','.','*'},{'*','*','*'}};
char a9[5][3]={{'*','*','*'},{'*','.','*'},{'*','*','*'},{'.','.','*'},{'*','*','*'}};
char ch[5][40005];
int n,cnt=1;
bool check(char a[5][3],char ch[5][40005],int y){
for(int i=0;i<5;i++){
for(int j=0;j<3;j++)
if(a[i][j]!=ch[i][j+y])
return false;
}
cnt+=4;
return true;
}
int main(){
scanf("%d",&n);
for(int i=0;i<5;i++)
for(int j=0;j<n*4;j++)
scanf("%c",&ch[i][j]);
while(cnt<n*4){
if(check(a0,ch,cnt))cout<<"0";
if(check(a1,ch,cnt))cout<<"1";
if(check(a2,ch,cnt))cout<<"2";
if(check(a3,ch,cnt))cout<<"3";
if(check(a4,ch,cnt))cout<<"4";
if(check(a5,ch,cnt))cout<<"5";
if(check(a6,ch,cnt))cout<<"6";
if(check(a7,ch,cnt))cout<<"7";
if(check(a8,ch,cnt))cout<<"8";
if(check(a9,ch,cnt))cout<<"9";
}
return 0;
}