蓝桥杯2018年真题解答(2)

博客围绕“明码”题目展开,提及16点阵字库仍广泛使用,给出题目数据。解题思路方面,因题目有8个字节,定义二进制数组为8,考虑十进制数正负分别计算,还提到负数转二进制要取反加一,代码虽累赘但可作思路参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

明码

汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛

4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4
4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64
16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128
0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0
2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0
1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0
0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0
 

思路:

题目说有8个字节,所以定义二进制数组为8,因为题目给的十进制数有正有负,所以要分别就算,可能是我的编译器有问题,不能写dp[qwe]=0 所以我加了1之后又减1,注意负数转二进制要取反加一。(代码有点累赘,但是应该是可以看懂的,只是代表思路,具体实现还要自己思考)

#include"iostream"
#include"algorithm"
using namespace std;
void huahua(int kk){

	int i=1;
	int j=0;
	int pd[8]={0};
	int qwe=kk;
	int a=abs(qwe);
	
	
	while(i){
		if(a==0){
			i=0;
		}
		pd[j]=a%2;  
		a=a/2;
		j++;
		
	}
	if(kk<0){
		for(int qyc=0;qyc<8;qyc++){
			if(pd[qyc]==1)
			pd[qyc]=1;
			if(pd[qyc]==0)
			pd[qyc]=2;
			}
			for(int qyc=0;qyc<8;qyc++){
		
			pd[qyc]-=1;
		
			}
			pd[0]+=1;
		for(int qyc=0;qyc<8;qyc++){
			if(pd[qyc]==2){
				pd[qyc+1]+=1;
				pd[qyc]=0;
			
		}
		}
		reverse(pd,pd+8);
	}
	else if(kk>=0){
		reverse(pd,pd+8);
	}
	
	for(int x=1;x<8;x++){
		if(pd[x]==1)
		cout<<"*";
		else
		cout<<" ";
	}


}
int main(){
	int x;
	int abc[10][32];
	for(int k=0;k<10;k++)
	for(int i=0;i<32;i++){
		cin>>abc[k][i];
	}
	for(int k=0;k<10;k++)
	{
	for(int i=0;i<32;i++){
		huahua(abc[k][i]);
		if((i+1)%2==0)
		cout<<endl;
	}
	
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值