2018年蓝桥杯省赛 填空题 1.明码 知识点:进制问题

1.明码 - 蓝桥云课 (lanqiao.cn)

解析:201803明码_哔哩哔哩_bilibili

首先每行读入32个数字,我们分别用x和y各读入16个 ,表示字迹和底色。

我们需要做的就是把字迹的16个数字转为2进制,底色的16个数字转为2进制,然后2进制中的1用'1'来表示字迹,2进制中的0用' '来表示底色。合起来 组成汉字。

Tisps

+127的二进制是:0 1 1 1 1 1 1 1 (符号位为0不能改),也就是正数的八位二进制最大就是127

-1的二进制是: 1 0 0 0 0 0 0 1,取反+1变为:1 1 1 1 1 1 1 1

我们发现和127的二进制一样(除了符号位)

那么-1的二进制我们可以通过按位与上 127的每一位取判断有多少个1(不判断符号位),就相当于求-1的八位二进制有多少个1(因为二者除了符号位不一样外其他都一样)

2的二进制是: 1 0 0 0 0 0 1 0,取反+1之后是:1 1 1 1 1 1 1 0

126的二进制是:0 1 1 1 1 1 1 0

我们发现发现也可以用同样的方法 通过求126的八位二进制有多少个1去求出-2的八位二进制有多少个1.

总结,因此对于负数,我们可以通过 128+(负数)>>(1~30)&1==1的方式求出负数的二进制位。

code

js 复制代码
#include<bits/stdc++.h>
using namespace std;

void toBinaryStr(int i,string& ans)
{
    //正数部分
		if(i>0)
		{
		
			for(int j=0;j<7;j++)  //一个字节一个字节的进行转化 
			if(((i>>j)&1)==1) 
			{
				ans[8-j-1]='1'; //从高位到低位赋值 
			} 
		}
		//负数部分 
		else
		{
			 
			 for(int j=0;j<7;j++)
			 {
			 	if((((128+i)>>j)&1)==1)
			 	{
			 		ans[8-j-1]='1';
				 }
			 }
		}
} 
int main()
{
	
	for(int i=0;i<10;i++)  //一共10行 
	{
		for(int j=0;j<16;j++)  //每行32位,但是字迹和底色各占一半 ,所以字迹和背景各占16位 
		{
			int x,y;cin>>x>>y;
			string x1="        ",y2="        ";  //背景,每个占八位 
			
			//转换为二进制 
			toBinaryStr(x,x1);	
			toBinaryStr(y,y2);	
			
			cout<<x1+y2<<endl;
		}
		cout<<endl<<"================================================="<<endl;  //分割,方便清晰 
	}
	
        
        //求9的9次方
	long long ans=9;
	for(int i=0;i<9;i++)
	{
		ans*=9;
	}
	cout<<ans;
	return 0;
 } 
相关推荐
聚客AI15 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v18 小时前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工19 小时前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农21 小时前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了21 小时前
AcWing学习——双指针算法
c++·算法
moonlifesudo1 天前
322:零钱兑换(三种方法)
算法
NAGNIP2 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队2 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja2 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法