题目解析:
本题目一看到我就没了方向,怎么计算呢,使用啥呢,也没啥规律啊,但是看到大佬的题解,不愧是大佬总能找到规律
其实看到题目的数据范围1e9,这个数据如果使用算法的话只能使用时间复杂度为O(log n)也就是筛质数的方法,
这个显然不是,那么就是找规律的题目!
题目规律:
通过手动模拟,可以发现当1~1时,最少的砝码数为1,当1~2,1~3,1~4时砝码的最少个数为2个,若当k=5的时候最少的砝码个数为3个,两个不足以表示1~5的数字范围,接下来枚举,可以发现5~14范围内,砝码个数最少为3个,………………
可以发现规律,这是一个等比数列,sum=a1*(1-q^n)/(1-q),q=3,sum为k,n为我们要求解的最少的砝码个数。
代码:
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
cout<<ceil(log(2*n+1)/log(3))<<endl;
return 0;
}
扩充:cmath函数头常用的函数:
- ceil(),floor(),round()这三个函数内的参数均为浮点数类型,ceil()天花板,向上取整ceil(-11.5)=-10,floor()地上
向下取整floor(-11.5)=-12,round()四舍五入方式取整。 - abs(n)绝对值 ,exp(n)e的n次方 ,log(n)以e为底进行运算 ,log10(n) ,sqrt(n)开平方 ,pow(x,y)x的y次方。
3.三角函数,sin(),cos()等。
详情链接:
cmath用法