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\n", 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 }
时间: 2024-08-24 16:25:28