题目描述
给你一个n,你需要只用0或者1两个数凑出一些十进制数累加等于n,并且需要十进制数的个数最小,并且输出最小个数k,以及那些数构成的?
Solution
只用0或者1构建很容易发现最少的个数就是n当中最大的十进制位的大小。其他位不需要那么大直接补0即可,比较显然这个条件。
接下来只需要去模拟每一位的剩余个数即可,总体比较简单。
#include <cstdio>
#include <algorithm>
using namespace std;
int num[10], cnt;
int main() {
int n, k = 0;
scanf("%d", &n);
while (n) {
k = max(k, n % 10);
num[++cnt] = n % 10;
n /= 10;
}
printf("%d\n", k);
for (int i = 1; i <= k; ++i) {
int ans = 0;
for (int j = cnt; j; --j) {
ans = 10 * ans;
if (num[j]) ans += 1, --num[j];
}
printf("%d%c", ans, " \n"[i == k]);
}
return 0;
} 
京公网安备 11010502036488号