Secrets CodeForces - 333A

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;
posted @ 2017-09-10 19:35  hehe_54321  阅读(178)  评论(0编辑  收藏  举报
AmazingCounters.com