转自:https://blog.csdn.net/u013377068/article/details/79778568

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

16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。

一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。
把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,
一共16行,布局是:

第1字节,第2字节
    第3字节,第4字节
    ....
    第31字节, 第32字节

这道题目是给你一段多个汉字组成的信息,每个汉字用32个字节表示,这里给出了字节作为有符号整数的值。

题目的要求隐藏在这些信息中。你的任务是复原这些汉字的字形,从中看出题目的要求,并根据要求填写答案。

这段信息是(一共10个汉字):
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

注意:需要提交的是一个整数,不要填写任何多余内容。

没什么好说的,需要注意的是负数如何转换成二进制,只需要将这个负数的相反数的二进制求出来并对

每一位取反(这个过程叫取原码的反码),取反之后进行补码就行。

不明白原码、反码、补码的点击打开链接。

这10个汉字的意思是  九的九次方等于多少?,答案是一个整数387 420 489;

第一种方法:模拟。

代码如下:

#include <iostream>
#include <string.h>
using namespace std;
int  Binary[8];
int TransFormation(int a)
{bool is = true;int index = 0;if(a < 0){is = false;a = -a;}memset(Binary,0,sizeof(Binary));  //因为一个字节只储存八位,并且除了有效位之外全部是0;while(a){Binary[index++] = a % 2;  //倒着储存二进制 a /= 2;}if(!is){for(int i = 0; i < 8; i++){Binary[i] ^= 1; //取原码的补码}int temp;for(int i = 0; i < 8; i++){if(i == 0) temp = Binary[i] += 1;    //取反码的补码 elsetemp = Binary[i];if(temp >= 2){Binary[i+1] += 1;Binary[i] %= 2; }elsebreak;}}for(int i = 7; i >= 0; i--){if(Binary[i] == 1)printf("#");elseprintf(" ");}
}
int main()
{int data[15][40];int n = 10,  m = 32;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){scanf("%d",&data[i][j]);}}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){TransFormation(data[i][j]);  if(j&1)         //每两个字符代表一个汉字的一行相当于(j%2!=0) printf("\n");}printf("\n");}return 0;
} 

第二种方法:用库函数。

转自:https://blog.csdn.net/u011747888/article/details/79781040

#include <iostream>
#include <bitset>
using namespace std;
int main()
{int n,m;while(cin>>n>>m){bitset<8> t(n);//创建对象的时候可以直接传进去一个数cout<<t.to_string();t = m;//也可以直接赋值cout<<t.to_string()<<endl;}
}

你没看错 就这么简单。。。。。

核心代码讲解

bitset的作用是把一个数转换成二进制
bitset<8>是把一个数转换成一个8位的二进制
所以输出的时候要转换成string输出
这样应该就好理解了

美化后的代码:

#include <iostream>
#include <bitset>
using namespace std;
int main()
{int n,m;int len;string temp;bitset<8> t;while(cin>>n>>m){t = n;temp = t.to_string();len = temp.length();for(int i = 0; i < len; i++){if(temp[i]=='0'){cout << " ";}else{cout << "*";}}t = m;temp = t.to_string();len = temp.length();for(int i = 0; i < len; i++){if(temp[i]=='0'){cout << " ";}else{cout << "*";}}cout << endl;}}

第三种方法:直接把每个数转成二进制

#include<iostream>
using namespace std;  int main()
{  int m,n,w[16];  while(cin>>m>>n)  {  for(int i=7;i>=0;i--){w[i]=m&1;m>>=1;}  for(int i=15;i>=8;i--){w[i]=n&1;n>>=1;}  for(int i=0;i<=15;i++){cout<<w[i]<<" ";}  cout<<endl;  }
}  

转自:https://blog.csdn.net/huang826336127/article/details/79779367#reply

第九届蓝桥杯 明码(三种方法)相关推荐

  1. 第九届蓝桥杯 明码2018

    汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛. 16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32个字节就可以存一个汉 ...

  2. [第九届蓝桥杯省赛C++B组]明码

    题目来源:第九届蓝桥杯省赛C++B组 算法标签:位运算 题目描述:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛. 16点阵的字库把每个汉字看成是16x16个像素信息.并把这些 ...

  3. 第九届蓝桥杯省赛——明码

    题目: 标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛. 16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32 ...

  4. problem b: 一年中的第几天_第九届蓝桥杯B组试题

    1. 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. "============= ...

  5. 关于2018年第九届蓝桥杯省赛(江苏赛区)

    为啥到现在才写呢...就是懒,是真的懒.题也没刷几个 (下面题目的超链接转自这里,并不是本人解法..只是因为有题目还有题解) 4.1举行的蓝桥杯也可以说是"愚人杯"了 早早的跟同学 ...

  6. 第九届蓝桥杯C++B组

    第九届蓝桥杯C++B组C++与python解法 1.标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余 ...

  7. 阶乘末尾蓝桥杯java_Java实现第九届蓝桥杯阶乘位数

    阶乘位数 题目描述 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞&qu ...

  8. 第九届蓝桥杯大赛软件类国赛

    文章目录 第九届蓝桥杯大赛软件类国赛 国赛C++ A组 三角形面积 阅兵方阵 找假币 约瑟夫环 -- important 自描述序列 -- todo 采油 -- todo 国赛C++ B组 换零钞 激 ...

  9. 2018省赛第九届蓝桥杯真题C语言B第四题题解 测试次数

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机 ...

  10. 蓝桥杯的c语言编译器,第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组比赛心得(还在更新)...

    第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组 考生须知: 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题. 考试时间为4小时.时间截止后,提交答案无效. 在考试强制结束 ...

最新文章

  1. 软件包管理 之 Linux软件安装之RPM的安装技巧
  2. dataconnectiondialog mysql_MySQL的DataConnectionDialog
  3. 手动制造报错_一个订单管理系统帮你轻松应对复杂的生产订单管理
  4. 数据结构 - 从二叉搜索树说到AVL树(一)之二叉搜索树的操作与详解(Java)
  5. 国科大高级人工智能12-博弈
  6. tbb::parallel_for 实例
  7. 【Django 2021年最新版教程16】pycharm model模型修改之后如何同步更新到mysql数据库
  8. Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
  9. 【转】Perl、PHP、Python、Java和Ruby的比较
  10. 搜电影和网盘资源网站
  11. Java基础入门第二版 课后答案
  12. 股市日记之十四:牛二阶段(上篇)
  13. 研发人员如何开展职业规划
  14. API经济打通企业内外互通的任督二脉?
  15. kotlin-android-extensions过时了,迁移到ViewBinding
  16. poj 2454 随机化(划片使得选举胜利)
  17. 使用服务器出现error:cannot connect to X server
  18. 苹果官方mfi认证名单_阿里六星级运营服务商名单出炉!获得官方认证的公司花落谁家?...
  19. Resultful API的拦截(过滤器——Filter)
  20. MOS管中的N型/P型是什么意思?沟道呢?金属氧化物膜又是什么

热门文章

  1. 湖北武汉电信及全国DNS分析(湖北的DNS已验证)
  2. uk码对照表_36码(uk码和中国码对照表)
  3. word中插入上下左右箭头
  4. 微信配网airkiss
  5. linux source命令路径,source(.)命令
  6. dosbox 中文操作系统_中兴新支点国产操作系统新版本了,越来越好用了
  7. 多传感器融合用卡尔曼滤波的话也逃不开状态方程观测方程
  8. 求虐,我还想再拓展一次
  9. 智能爆炸的真实(上)
  10. 白盒测试和黑盒测试的区别