-
2019-03-21 20:38:54
汉字的字形存在于字库中,即便在今天,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注意:需要提交的是一个整数,不要填写任何多余内容。
最终答案是81
思路:用记事本替换功能讲数据修改为用逗号分隔,然后直接复制进代码直接输出二进制格式。
代码如下:#include<bits/stdc++.h> using namespace std; int main(){ int a[320] = {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}; for(int i = 0;i<sizeof(a) / sizeof(a[0]);i++){ if(i%2==0){ cout<<bitset<sizeof(a[i])*2>(a[i]); } else{ cout<<bitset<sizeof(a[i])*2>(a[i])<<endl; } } return 0; }
使用bitset<sizeof(a[i])*2>(a[i])的时候需要头文件< bitset >吼。由于我这里引用了万用头文件所以不需要再次引用。
新人第一次发博客。。。小紧张~~~大佬勿喷。。。
更多相关内容 -
蓝桥杯 明码题解 【Java实现】
2021-03-09 23:20:06文章目录一、题目二、思路描述三、代码 一、题目 二、思路描述 总方法:直接模拟,遇到字母直接输出,遇到数字循环输出数字的前一个字符即可。 步骤:先用字符串输出一长串,之后将字符串转化为字符数组,然后遍历...一、题目
二、思路描述
总方法:直接模拟,遇到字母直接输出,遇到数字循环输出数字的前一个字符即可。
步骤:先用字符串输出一长串,之后将字符串转化为字符数组,然后遍历字符数组进行数字和字母判断即可求解三、代码
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); //遇到数字就循环遍历输出,遇到字母就直接输出 String s = sc.nextLine(); char[] str = s.toCharArray(); for(int i =0;i<str.length;i++){ if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')){ System.out.print(str[i]); }else{ int t = str[i] - '0'; for(int j=0;j<t-1;j++){ System.out.print(str[i-1]); } } } } }
-
蓝桥杯真题 明码 汉字的字形存在于字库中,即便在今天,16 点阵的字库也仍然使用广泛。 16 点阵的字库把每...
2022-03-16 20:17:35题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 汉字的字形存在于字库中,即便在今天,16 点阵的字库也仍然使用广泛。 16 点阵的字库把每个汉字看成是 16×16 个像素信息。...题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
汉字的字形存在于字库中,即便在今天,16 点阵的字库也仍然使用广泛。
16 点阵的字库把每个汉字看成是 16×16 个像素信息。并把这些信息记录在字节中。
一个字节可以存储 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
运行限制
最大运行时间:1s
最大运行内存: 128M代码
#include<stdio.h> #include<iostream> #include<math.h> #include<string> using namespace std; int arr[110]; void Change(int x)//将十进制转化为二进制 { int i, j, k; k = abs(x); i = 0; while (k != 0) { arr[i] = k % 2; k /= 2; i++; } if (x < 0)//判断是否是正数 { for (i = 0; i < 7; i++) { if (arr[i])arr[i] = 0; else arr[i] = 1; } int y = 0; while (arr[y]) { arr[y] = 0; y++; } arr[y] = 1; } } int main() { int a[32]; int i, j, k; for (k = 0; k < 9; k++) { for (i = 0; i < 32; i++) { cin >> a[i]; Change(a[i]); for (j = 7; j >= 0; j--) { if (arr[j] == 1)cout << arr[j]; else cout << " "; } memset(arr, 0, sizeof(arr)); if (i % 2 == 1)cout << endl; } } return 0; }
最后代码结果表达的意思是:九的九次方等于多少,
也就是最后的结果是9*9=387420489。思路
本题就是将每个数字转化为二进制,也就是对应的八位的二进制数字,之后在输出的时候如果某位数字为0则输出空格,如果为1就正常输出1。并且在输出的时候每行输出两个数据对应的二进制数字。
负数补码的计算方法:
第一种
1.先求出负数绝对值的二进制。
2.除了第一位符号不变,其他各位取反(此时求出来的是反码),最后+1就是补码
第二种
1.先求出负数绝对值的二进制
2.从最后一位向前直到遇到第一个1,该位置之前的数取反。代码中给出的是第一种计算方法
接下来给出第二种计算方法,仅需修改Change方法即可#include<stdio.h> #include<iostream> #include<math.h> #include<string> using namespace std; int arr[110]; void Change(int x) { int i, j, k; k = abs(x); i = 0; while (k != 0) { arr[i] = k % 2; k /= 2; i++; } if (x < 0) { for (i = 0; i <= 7; i++) { if (arr[i] == 1 && i < 7) { for (j = i + 1; j <= 7; j++) { if (arr[j] == 0) arr[j] = 1; else arr[j] = 0; } break; } } } } int main() { int a[32]; int i, j, k; for (k = 0; k < 9; k++) { for (i = 0; i < 32; i++) { cin >> a[i]; Change(a[i]); for (j = 7; j >= 0; j--) { if (arr[j] == 1)cout << arr[j]; else cout << " "; } memset(arr, 0, sizeof(arr)); if (i % 2 == 1)cout << endl; } } return 0; }
-
蓝桥杯 真题:明码 一题掌握3种码
2022-02-12 20:11:36距离蓝桥杯56天 学习算法的目的是为了提升自己 感谢某站对三种码的讲解 传送门原码 反码 补码_哔哩哔哩_bilibili 题目链接 问题分析:很多小伙伴一定和小郑一样 对 题干说明的:给出字节作为有符号整数的值 ...距离蓝桥杯56天
学习算法的目的是为了提升自己
感谢某站对三种码的讲解 传送门原码 反码 补码_哔哩哔哩_bilibili
问题分析:很多小伙伴一定和小郑一样 对 题干说明的:给出字节作为有符号整数的值 不理解在一开始的时候 为什么会有负数?对于和小郑一样的小白来说,一个字节八位,表示的数据范围[00000000,11111111]即[0,255] 哪儿来的负数?
其实 上面的这种认识是基于无符号数据,实际上,数值数据还有一种叫做有符号数据。
有符号数据有三种表示法:原码,反码,补码
只要了解了原码 后面两种码迎刃而解
8位原码 最高位0表示正号,1表示负号 后七位的范围是[0,127]
所以8位原码的范围[-127,127] 所以确定一个数字的原码分两步:1:正负号决定最高位 2:数字的绝对值决定后七位
懂了原码 反码就好理解了:反码基于原码,除了最高位(符号位),其余取反
懂了反码 补码就好理解了:补码基于反码 在反码的基础上+1
而这三种码,补码最重要 因为在计算机系统中,数值一律用补码来表示和存储。
所以下面着重研究算补码的办法(本题也基于补码)
先研究负数:
举个例子:求-1的补码 那么我们已知-1的原码为10000001
那么-1的反码为11111110 那么-1的补码为11111111
就这么简单。然后对于负数[-127,-1]都可以按照上述类似求-1的方法计算
然后对于-128,我们规定它的补码是10000000
再研究正数:
正数的补码=正数的反码=正数的原码 综上8位补码的表示范围[-128,127]
所以,了解了三种码以后(最重要的是补码),回归题目,现在对字节作为有符号整数的值的概念是不是清晰了?实际上就是让我们求每个整数的补码
每行汉字有32个字节构成,16*16的像素:一行2个字节,一个字节8位,组成16行
因此把它打印出来即可:所以问题在问九的九次方是多少?
s="""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""" a=s.split('\n') dict={} def reverse(str): ans='' for i in str: ans+='0' if int(i)==1 else '1' return ans for j in range(-128,128): if j>=0: dict[j]=(8-len(bin(j)[2:]))*'0'+bin(j)[2:] elif j==-128: dict[j]='10000000' else: tmp=reverse((7-len(bin(abs(j))[2:]))*'0'+bin(abs(j))[2:])#除了符号位取反 tmp_add=bin(int(tmp,2)+1)[2:]#+1 dict[j]='1'+(7-len(tmp_add))*'0'+tmp_add for i in a: tmp=list(map(int,i.split())) start=0#end=31 while start<=30: s=dict[tmp[start]]+dict[tmp[start+1]] print(s) start+=2 print('\n')
由于长度过长,就放一张‘九的’好了,具体可自行运行代码
我是小郑 正在奔赴热爱 奔赴山海
-
2018第九届蓝桥杯javaB组真题
2018-04-02 11:47:262018年第九届蓝桥杯javaB组真题。2018年第九届蓝桥杯javaB组真题。 -
第九届蓝桥杯省赛c/c++真题明码题解答案,另类excel解法思路
2018-04-07 14:54:00直到快比赛才重视起之前学校给报了蓝桥杯,且这段时间一直在做Python,所以没做什么准备。 赛场上做这道题时连反码补码的知识点都记混,所以直接用了excel做这道题目,分享下做题思路、及题解。 标题:明码 ... -
蓝桥杯真题_明码
2019-03-17 17:52:14汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。 16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。 一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。... -
蓝桥杯真题2018B-明码
2020-10-15 00:41:53标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。 16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。 一个字节可以存储8位信息,用32个字节就可以存一个汉字... -
【原创】蓝桥杯真题 带分数 Python解法
2021-04-07 19:34:11思路:输入=左边整数+右边分数(分母/分子),【1-9】的数字只出现一次 0不能出现 用左边整数决定右边分数(枚举左边整数) 枚举生成右边分数的分母排列组合 得出分母对应的分子 (左边整数+分子分母)形成字符串 再... -
2018年第九届蓝桥杯真题C/C++B组
2018-04-01 22:36:062018年第九届蓝桥杯真题C/C++B组1、标题:第几天2000年的1月1日,是那一年的第1天。那么,2000年的5月4日,是那一年的第几天?注意:需要提交的是一个整数,不要填写任何多余内容。2、标题:明码汉字的字形存在于... -
蓝桥杯真题训练6
2022-02-14 12:59:27蓝桥杯真题训练 1-特别数的和 小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 nn 中,所有这样... -
2018省赛第九届蓝桥杯真题C语言B组第二题题解 明码
2018-04-01 19:13:202018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。 16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。 一个... -
C语言——明码问题(进制变化)(蓝桥杯真题)
2021-05-23 08:46:28问题分析:这个问题有两种方法,第一种是建造一个全局变量的二维数组x[16][16],通过循环调用函数(将一个十进制数变为二进制然后放入数组中),然后通过循环,判断每一位是否为1,是则输出“*”。... -
2018年蓝桥杯真题解析分析及代码听课笔记
2020-03-10 00:48:30//明码 void toBinaryStr(int i,string &ans){ if(i >= 0){ ans[0] = '-'; for(int j = 0; j ;++j){ if(((i>>j)&1)==1)//二进制上位1 { ans[8-j-1] = '1'; } } }else{ ans[0]='1'; for(int j = 0; j;++j){ if(((... -
2018年蓝桥杯B组真题详解
2021-02-22 02:24:152018年蓝桥杯B组真题详解第一题:第几天代码第二题:明码代码 第一次写题解 第一题:第几天 2000年的1月1日,是那一年的第1天。 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写... -
明码 C++函数库bitset【蓝桥杯真题】 (c++实现)
2020-03-27 11:14:50上文链接:k倍区间 前缀和+选排列【蓝桥杯真题】(c++) 题目描述: 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。... -
蓝桥杯c/c++省赛真题——明码
2019-03-11 21:36:00标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。###16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。 ###一个字节可以存储8位信息,用32个字节就可以... -
2018蓝桥杯明码
2021-03-26 10:37:462018-第九届蓝桥杯大赛个人赛省赛 软件类真题 C大学B组 第二题 明码 答案:387420489 题目如下: 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。 16点阵的字库把每个汉字看成是16x16个像素... -
2018年4月1日省赛第九届蓝桥杯真题c,c++(B组)
2018-04-01 16:58:31(未完待续)虽然没参加,但尝试一下写几题,不能保证正确性,但我觉得挺对的QAQ。...31+29+31+30+4=125第二题:明码 这题意看的我眼花缭乱,答案9^9.第三题:乘积尾零 直接java大整数搞一下,然后数数,或者... -
2018年第九届蓝桥杯省赛B组真题 B题:明码
2020-10-15 15:48:02明码 题目描述: 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。 16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。 一个字节可以存储8位信息,用32个字节就可以存一个...