B3900 [NICA #3] 数字显示屏
查看原帖
B3900 [NICA #3] 数字显示屏
1024009
Teacher_K楼主2024/4/22 22:34

比较烦人的普及组题: 首先,想到的是打表,虽然比较麻烦,但是好理解,运行速度也比较快! 把从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;
}
2024/4/22 22:34
加载中...