序列重排【构造cmp排序】
思路:
因为要求新序列满足每个元素(第 1 个除外)都恰好是前一个元素的两倍或前一个元素的三分之一。
所以,从1~n的数中,其包含质因子2的个数一定是不降的,其包含质因子3的个数一定是不增的。
根据这个,我们可以求出来每一个数的质因子2和3的个数,以他们作为关键字排序。排序规则可以以2的个数为第一关键字,以3的个数为第二关键字。因为题目保证有解,所有排序完之后直接输出即可。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long LL;
const int N = 110;
int n;
vector<LL> q[N];
int get(LL x, int b)
{
int res = 0;
while (x % b == 0) res ++, x /= b;
return res;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i ++ )
{
LL x;
cin >> x;
q[i] = {get(x, 2), -get(x, 3), x};
}
sort(q, q + n);
for (int i = 0; i < n; i ++ )
cout << q[i][2] << ' ';
cout << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界