原题
题意:
假设n个砝码连续表示出0-k,选第n+1个砝码,重为2k+1,
则
k+1=2k+1-(k)
k+2=2k+1-(k-1)
2k+1=2k+1-(0)
2k+2=2k+1+1
3k+1=2k+1+(k)
ans[i+1] = 3*ans[i]+1
ans[i+1]+1/2=3(ans[i]+1/2)
ans[n]=3^(n-1) * (ans[1]+1/2)
(ans[1]+1/2)=3/2
所以 ans[n]=3^(n-1) * 3/2
ans[n]>=input
3^(n-1) * 3/2>=input
3^(n-1)>=input*2/3
n-1>=log3(input*2/3)
n>=log3(input*2/3)+1
log3m=log(m)/log(3)
log和log10函数
log以e为底,log10以10为底
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int k;
cin >> k;
//cout << ceil(log(2*k/3)/log(3))+1 << endl;
if(k==1){
cout<< 1;
return 0;
}
cout << (ceil)(log(2*k/3)/log(3))+1 << endl;
}
ceil向上取整,floor向下取整