这道题只让再可能的数中有0或1出现,那么最少可能方案的数量只可能是每个位上的最大的数字,因为一定要在这个位上减去这个数目的一,才可以将这位变成0,接下来就是按每一位的大小求出这一位该有几个数这一位是1
很重要的部分,求出每一个数的每一位是一还是零
for(int i=1;i<=n;i*=10){
int res=(n/i)%10; //求出最后一位的数值
ans=max(ans,res);
for(int j=1;j<=res;j++){ //每一位是几,就应该有几个数这个位是1
num[j]+=i;
}
}
#include<bits/stdc++.h>
using namespace std;
int n;
int num[1005];
int main(){
cin>>n;
int ans=0;
for(int i=1;i<=n;i*=10){
int res=(n/i)%10; //求出最后一位的数值
ans=max(ans,res);
for(int j=1;j<=res;j++){ //每一位是几,就应该有几个数这个位是1
num[j]+=i;
}
}
cout<<ans<<endl;
for(int i=ans;i>=1;i--){
cout<<num[i]<<" ";
}
return 0;
}