洛谷 P2320 [HNOI2006]鬼谷子的钱袋

题目传送门

解题思路:

对于每一个数i,我们都可以用i/2来表示,而对于i/2我们可以用i/4表示......(以此类推)

举个例子,对于10,我们可以用5 + 5来表示,而5可以用 3 + 2表示,2 可以用1 + 1表示,所以对于10,我们只需要5,3,2,1即可.

AC代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 
 4 using namespace std;
 5 
 6 int m,ans[2000000],k;
 7 
 8 int main()
 9 {
10     scanf("%d",&m);
11     while(m) {
12         ans[++k] = (m + 1) / 2;
13         m /= 2;
14     }
15     printf("%d\n",k);
16     k++;
17     while(--k) 
18         printf("%d ",ans[k]);
19     return 0;
20 }

猜你喜欢

转载自www.cnblogs.com/lipeiyi520/p/11306013.html