题目传送门
1 /*
2 贪心水题:首先,最少的个数为n最大的一位数字mx,因为需要用1累加得到mx,
3 接下来mx次循环,若是0,输出0;若是1,输出1,s[j]--;
4 注意:之前的0的要忽略
5 */
6 #include <cstdio>
7 #include <iostream>
8 #include <cstring>
9 #include <string>
10 #include <algorithm>
11 #include <cmath>
12 #include <set>
13 #include <map>
14 using namespace std;
15
16 const int MAXN = 1e4 + 10;
17 const int INF = 0x3f3f3f3f;
18
19 int main(void) //Codeforces Round #300 A Cutting Banner
20 {
21 //freopen ("B.in", "r", stdin);
22
23 char s[10];
24 while (scanf ("%s", &s) == 1)
25 {
26 int len = strlen (s);
27 int mx = -1;
28 for (int i=0; i<len; ++i) mx = max (mx, s[i] - '0');
29
30 printf ("%d
", mx);
31 for (int i=1; i<=mx; ++i)
32 {
33 bool ok = false;
34 for (int j=0; j<len; ++j)
35 {
36 if (s[j] == '0')
37 {
38 if (!ok) continue;
39 else printf ("0");
40 }
41 else
42 {
43 ok = true;
44 printf ("1"); s[j]--;
45 }
46 }
47 if (i < mx) printf (" ");
48 }
49 puts ("");
50 }
51
52 return 0;
53 }