目录
特别说明:本文章运用了万能头文件#include <bits/stdc++.h>,会降低代码的运行效率,读者可根据实际情况进行更改。不难。
A.九进制转十进制
问题描述
九进制正整数(2022)₉转换成十进制等于多少?
法一:
2 * 9^3 + 0 * 9^2 + 2 * 9^1 + 2 * 9^0=1478
此题用代码简直是在浪费时间,填空题应该本着能省则省(省时间)的原则。
哈哈哈哈哈哈,难道这不是最简单的方法吗?
#include <bits/stdc++.h>
using namespace std;
int main()
{
cout << 2 * 9^3 + 0 * 9^2 + 2 * 9^1 + 2 * 9^0;
return 0;
}
法一:老老实实的转换
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int main()
{
int x = 2022;
int a = 1;
int ans = 0;
while(x) {
ans += (x % 10) * a;
a = a * 9;
x /= 10;
}
cout << ans;
return 0;
}
答案:1478
B.顺子日期
问题描述
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456等。顺子日期指的就是在日期的yyyymmdd表示法中,存在任意连续的三位数是一个顺子的日期。例如20220123就是一个顺子日期,因为它出现了一个顺子:123;而20221023则不是一个顺子日期,它一个顺子也没有。小明想知道在整个2022年份中,一共有多少个顺子日期。
思路
由于只需要判断2022年这一个年份,所以,只需要手写几个日期即可。此题具有很大的争议,很多人在讨论 012 算不算顺子,因为题目里说 0123 中的顺子是 123,我是算了的,不算的话答案应该是 4。
法一:日历
年份 2022 是不变的,而且不可能搭上顺子,所以只考虑后四位即可。
可能搭上顺子的月份有:
1月:0120 ~ 0129 共 10 个,顺子是 012 (其中 0123 可以认为顺子是 123)
10月:1012,顺子是 012
11月:1123,顺子是 123
12月:1230,1231,顺子是 123
一共 14 个
#include <iostream>
using namespace std;
bool isSequential(int num) {
string str = to_string(num);
for (int i = 0; i < str.length() - 2; ++i) {
if (str[i + 1] == str[i] + 1 && str[i + 2] == str[i] + 2) {
return true;
}
}
return false;
}
int main() {
int ans = 0;
for (int date = 20220101; date <= 20221231; ++date) {
if (date % 100 < 32 && (date / 100) % 100 < 13 && isSequential(date)) {
cout << date << endl;
++ans;
}
}
cout << "共有 " << ans << "