站外题求助,玄关
  • 板块学术版
  • 楼主yangyanbin123
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/21 14:36
  • 上次更新2025/1/21 16:29:49
查看原帖
站外题求助,玄关
972929
yangyanbin123楼主2025/1/21 14:36

好数(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。

#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;
}

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

2025/1/21 14:36
加载中...