题目传送门
解题思路:
对于每一个数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 }
本文介绍了一种数分拆问题的解决方案,并给出了详细的解题思路。通过将每个数逐步分解为更小的整数之和,最终找到构成原数所需的最小整数集合。文章附带了完整的AC代码。
364

被折叠的 条评论
为什么被折叠?



