社区讨论

站外题求助,玄关

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m663hihv
此快照首次捕获于
2025/01/21 14:29
去年
此快照最后确认于
2025/01/21 14:34
去年
查看原帖
好数(GCOI2020六5) 查看测评数据信息 描述
在一张无穷大的桌面上,从左往右摆放着无穷张卡片,卡片的编号是0至无穷,第k张卡片的价值是3的k次方(即3k)。
对于一个正整数n来说,如果可以从桌面上选出若干张不同的卡片,选出来的卡片的价值总和等于n,那么n就称为“好数”。
例如:3是“好数”,因为3 = 3^1。
1是“好数”,因为1 = 3^0。
12是“好数”,因为12 = 3^2+ 3^1。
但2不是“好数”,虽然2 =3^0+3^0, 但是3^0和3^0是相同的卡片,不符合要求。
同理,19和20都不是“好数”。
给出一个正整n,你要找到一个最小的“好数”m,要满足m>=n,输出m。
输入
一行,一个整数n。 1<=n<=1000000000000000000。
输出
一个整数m。
输入格式 无
输出格式 无
输入/输出例子1 输入:14
输出:27
样例解释
【提示】
对于80%的数据,n<=100。
CPP
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
long long n;
bool check(long long x)
{
	while(x)
	{
		if(x%3==2) return false;
		x/=3;
	}
	return true;
}
int main() {
    cin>>n;
    while(!check(n)) n++;
    cout<<n;
    return 0;
}

代码上面的函数是判断好数的(听说这道题要用二分,具体也不知道要怎么做)

回复

0 条回复,欢迎继续交流。

正在加载回复...