蓝桥杯每日刷题c++

目录

[P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 (luogu.com.cn)](#P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 (luogu.com.cn))

[P8748 [蓝桥杯 2021 省 B] 时间显示 - 洛谷 (luogu.com.cn)](#P8748 [蓝桥杯 2021 省 B] 时间显示 - 洛谷 (luogu.com.cn))

[P10900 [蓝桥杯 2024 省 C] 数字诗意 - 洛谷 (luogu.com.cn)](#P10900 [蓝桥杯 2024 省 C] 数字诗意 - 洛谷 (luogu.com.cn))

[P10424 [蓝桥杯 2024 省 B] 好数 - 洛谷 (luogu.com.cn)](#P10424 [蓝桥杯 2024 省 B] 好数 - 洛谷 (luogu.com.cn))

[P8754 [蓝桥杯 2021 省 AB2] 完全平方数 - 洛谷 (luogu.com.cn)](#P8754 [蓝桥杯 2021 省 AB2] 完全平方数 - 洛谷 (luogu.com.cn))


P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 (luogu.com.cn)

可以设两个数组a和b,a中的数除以区间内的数永远等于b中的数,现在要找的就是这个区间。

a[i]/区间=b[i]可以转化为a[i]/b[i]=区间

先找区间内最大的数,该数如果要满足条件,那么该数就是a[i]/b[i]每一项中最小的数,遍历一遍即可找到

再找区间内最小的数,只要最大的数依次向下减一逐个验证即可

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<vector>
#include<climits>
using namespace std;
int main() {
	int n;
	cin >> n;
	vector<int> a(n);
	vector<int> b(n);
	int t = INT_MAX;
	int max = 0;
	for (int i =0; i < n; i++) {
		cin >> a[i] >> b[i];
		t = min(t, a[i] / b[i]);
	}
	for (int k = t; k >= 0; k--) {
		for (int i = 0; i < n; i++) {
			if (a[i] / k != b[i]) {
				cout << (k + 1) << " " << t << endl;
				return 0;
			}
		}
	}
}

P8748 [蓝桥杯 2021 省 B] 时间显示 - 洛谷 (luogu.com.cn)

简单的时间转化计算,唯一要注意的点是怎么把0打印出来

cpp 复制代码
#include<iostream>
using namespace std;
#define int long long
signed main() {
	int n;
	cin >> n;
	n /= 1000;
	n = n % (24 * 60 * 60);
	int hour = n / 3600;
	n %= 3600;
	int minute = n / 60;
	int second = n % 60;
	printf("%02lld:%02lld:%02lld", hour, minute, second);
	return 0;
}

P10900 [蓝桥杯 2024 省 C] 数字诗意 - 洛谷 (luogu.com.cn)

除1以外的奇数都符合,怎么找?奇数除以2,比如13/2==6,加上1,6+7=13

偶数的话,可以分解为奇数,比如24=8*3,3是符合的,那么这个偶数也是符合的,可以用等差数列的原理来证明

除了2的倍数,逐级往下分最后只能分出来1,但1是不符合的

所以问题转变成了找2的倍数有多少个

这里提供一种方法,2的倍数(假设为t)转换成2进制后只有一个1,其它位置都是0,所以只要判断(t & (t - 1)是否等于0,等于的话就是2的倍数

cpp 复制代码
#include <iostream>
#define int long long
using namespace std;
signed main() {
    int n, t;
    cin >> n;
    int count = 0;
    for (int i = 0; i < n; i++) {
        cin >> t;
        if ((t & (t - 1)) == 0) count++;
    }
    cout << count << endl;
    return 0;
}

P10424 [蓝桥杯 2024 省 B] 好数 - 洛谷 (luogu.com.cn)

感觉在函数中用while循环是最方便的

cpp 复制代码
#include<iostream>
using namespace std;
bool jud(int n) {
	//奇数false,偶数true
	bool flag = false;
	while (n) {
		if (flag) {
			//偶数位是奇数则不是好数
			if ((n % 10) % 2 != 0)return false;
		}
		else {
			//奇数位是偶数则不是好数
			if ((n % 10) % 2 == 0)return false;
		}
		n /= 10;
		flag = !flag;
	}
	return true;
}
int main() {
	int n;
	cin >> n;
	int count = 0;
	for (int i = 1; i <= n; i++) {

		if (jud(i))count++;
	}
	cout << count << endl;
	return 0;
}

P8754 [蓝桥杯 2021 省 AB2] 完全平方数 - 洛谷 (luogu.com.cn)

cpp 复制代码
#include <iostream>
using namespace std;
#define int long long
signed main() {
    int n;
    cin >> n;
    int res = 1;
    for (int i = 2; i * i <= n; i++) {
        int count = 0;
        while (n % i == 0) {
            count++;
            n /= i;
        }
        if (count % 2 == 1) res *= i;
    }
    if (n > 1) res *= n;
    cout << res;
    return 0;
}
相关推荐
烨然若神人~1 分钟前
算法训练营第十一天|150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
算法
天天爱吃肉82189 分钟前
机器学习经典算法:用决策树原理优化新能源汽车续航能力
算法·决策树·机器学习
金融小师妹14 分钟前
AI技术视角:美联储信号与黄金动态的量化研究——基于多模态数据分析框架
大数据·人工智能·算法
dot to one22 分钟前
C++ 深入解析 数据结构中的 AVL树的插入 涉及的旋转规则
数据结构·c++·算法·visual studio·avl树
电院大学僧29 分钟前
初学python的我开始Leetcode题8-4
python·算法·leetcode
MeteorSaraphines34 分钟前
第 14 届蓝桥杯 C++ 青少组省赛中 / 高级组真题解析
java·算法
冯诺依曼的锦鲤43 分钟前
C++内存管理与模板初阶详解:从原理到实践
c++
行驶1 小时前
数据结构和算法
数据结构·算法
IT小鸟鸟1 小时前
LinkList 的底层数据结构及优缺点
java·数据结构·算法
明月看潮生1 小时前
青少年编程与数学 02-019 Rust 编程基础 02课题、开始编程
开发语言·算法·青少年编程·rust·编程与数学