首页 前端知识 第十五届蓝桥杯之宝石组合

第十五届蓝桥杯之宝石组合

2025-03-02 13:03:38 前端知识 前端哥 63 125 我要收藏

这道题找精美程度最高的三个组合,根据我们数论的知识,也就是说找最大公因数最大的三个数

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 1e5 + 10;
int n;
int s[N];
vector<int> d[N];//开个桶
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> s[i];
	}//输入闪亮值
	sort(s + 1, s + 1 + n);//给闪亮值排序,因为我们要按字典序最小输出
	for (int i = 1; i <= n; i++)//遍历每个闪亮度
	{
		for (int j = 1; j <= sqrt(s[i]); j++)//遍历1到根号下这个闪亮度,我们把闪亮度尾插到下标为因子的桶里面
		{
			if (s[i] % j == 0)
			{
				d[j].push_back(s[i]);//此时的j是1到根号s[i]的因子
				if (s[i] / j != j) d[s[i] / j].push_back(s[i]);//此时的s[i]/j就表示另一半因子
			}
		}
	}
	for (int i = N; i >= 1; i--)//闪亮度最高为N,我们从N一直往下找,直到找到因子对应三个闪亮度的因子,我们就把这三个闪亮度一次输出

	{
		if (d[i].size() >= 3)
		{
			for (int j = 0; j < 3; j++)
			{
				cout << d[i][j] << " ";
			}
			cout << endl;
			break;
		}
	}



	return 0;
}

转载请注明出处或者链接地址:https://www.qianduange.cn//article/22358.html
评论
发布的文章

如何修改电脑mac地址?

2025-03-03 13:03:33

C 数组:深入解析与应用

2025-03-03 13:03:28

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!