Secrets CodeForces - 333A
题意:这个世界上只有这样面值的硬币:1,3,9,27,81,...有一个商人,某一天遇到了一个顾客,他购买了价值n的商品,发现用自己的硬币无法付给商人刚好n的钱。那个顾客会给商人大于等于n的钱且使得给商人的硬币数量最少。在这个顾客有的硬币可能的各种情况下,请问这个商人最多可能收到多少硬币?
方法:枚举小数据找规律
n 答案 小于等于n的最大的3的非负整数幂 1 1 1 2 1 1 3 1 3 4 2 3 5 2 3 6 1 3 7 3 3 8 3 3 9 1 9 10 4 9 11 4 9 12 2 9 13 5 9 14 5 9 15 2 9 16 6 9 17 6 9 18 1 9 19 7 9 20 7 9 21 3 9 22 8 9 23 8 9 24 3 9 25 9 9 26 9 9 27 1 27
1 #include<cstdio> 2 int main() 3 { 4 long long k=1,p=0,n; 5 scanf("%I64d",&n); 6 while(k*3<=n) 7 k*=3; 8 if(k==n) 9 { 10 printf("1"); 11 return 0; 12 } 13 while(n%k!=0) 14 k/=3; 15 printf("%I64d",n/(k*3)+1); 16 return 0; 17 }
很奇怪,但是简化一下可以得到更好的
1 //标程 2 int n,k=3; 3 cin>>n; 4 while(n%k==0) 5 { 6 k*=3; 7 } 8 cout<<n/k+1;