202603-1 二进制回文串
题目描述
对于一个正整数 ,我们将其转换为不含前导零的二进制表示,如果这个二进制序列从左向右读与从右向左读完全相同,则称该数为二进制回文数。例如, 的二进制表示为 ,是二进制回文数; 的二进制表示为 ,不是二进制回文数。
你的任务是:给定一个正整数 ,计算在 到 的范围内二进制回文数的数量。 输入格式
输入一行,包含一个正整数 。
输出格式
输出一行,包含一个数,表示在 到 的范围内二进制回文数的数量。
样例输入 1
15样例输出 1
6提示
【样例解释】
样例 1 中, 到 范围内 、、、、、 是二进制回文数。
【数据范围】
。
代码解析
我们可以直接进行二进制的数位剥离,将数字的二进制表示从低到高逐位剥离出来,同时将这些位再重新组合,得到一个新的数 ,如果 与原数相等,那么这个数就是二进制回文数。
#include <bits/stdc++.h>using namespace std;int main() {
int n,cnt = 0; cin >> n; for (int i = 1; i <= n; i++) { int j = i, m = 0; while (j) { m = m *2 + j % 2; j /= 2; } if (m == i) cnt++; } cout << cnt;
return 0;}202603-2 凯撒密码(回忆版)
题目描述
凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
例如,当偏移量是 的时候,所有的字母 将被替换成 , 被替换成 , 被替换成 ,以此类推, 被替换成 , 被替换成 , 被替换成 , 被替换成 。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。
但是和所有的利用字母表进行替换的加密技术一样,凯撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
现在给你一个已破解的凯撒密码明文与密文,与一个有相同偏移量的未破解凯撒密码密文,请你帮忙破解它。
输入格式
输入共三行:
- 第一行包含一个字符串,表示已破解的凯撒密码明文;
- 第二行包含一个字符串,表示已破解的凯撒密码密文;
- 第三行包含一个字符串,表示待破解的凯撒密码密文。
输出格式
输出一行,包含一个字符串,表示待破解的凯撒密码对应的明文。
样例输入
ABCDEFGVWXYZDEFGHIJYZABCWKHTXLFNEURZQIRAMXPSVRYHWUKHODCBGRJ样例输出
THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG代码解析
我们可以先计算出已破解的凯撒密码明文与密文之间的偏移量 ,然后对待破解的凯撒密码密文进行解密,即将每个字符 加上 ,但是由于 有可能大于零也有可能小于 0,所以加个判断,如果 超过了 ,则减去 ,如果 小于 ,则加上 。
#include <bits/stdc++.h>using namespace std;int main() {
string s1, s2, s; cin >> s1 >> s2 >> s; int n = s1[0] - s2[0]; for (char i: s) { i += n; if (i > 'Z') i -= 26; else if (i < 'A') i += 26; cout << i; }
return 0;}
陕公网安备61010302001363号