对于本题而言,我们不妨可以直接贪心,每次尽可能多的把每一位的1消掉一个.如此在线性的复杂度内即可做出.
#include <bits/stdc++.h>
int cnt[8];//统计每位的个数.
std::vector<int>v;
int main()
{
int n,ans=0;std::cin>>n;
int p=1000000;for(int i=1;i<=7;i++) {cnt[i]=n/p;if(cnt[i]) n-=cnt[i]*p;p/=10;ans=std::max(ans,cnt[i]);}
std::cout<<ans<<'\n';int f=0;
while(true)
{
int f=0,sum=0;
for(int i=1;i<=7;i++)
{
sum*=10;
if(cnt[i]) { f=1;sum+=1;cnt[i]--; }
}
if(!f) break;
else v.push_back(sum);
}
for(int i=0;i<v.size();i++) std::cout<<v[i]<<' ';puts("");
}

京公网安备 11010502036488号