题解 | #Quasi Binary#
Quasi Binary
https://ac.nowcoder.com/acm/problem/110925
题目考点:枚举
题目分析:将数字用数量尽量少的01串表示,表示的结果是每一个01串相加后得到原数字即可;
例如样例:103
需要用3个01串表示:
101 1 1
注意:100 1 1 1也可以表示,但是需要花费4个不是最优解
还有就是本题输出的01串不唯一,但最少数量一定唯一
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 15;
int cnt[N];
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; n; i++)
{
int t = n % 10;
for(int j = 1; j <= t; j++) // 将每一位拆分
cnt[j] += pow(10, i); // 数字的第i位为10的i次方
n /= 10;
}
int ans = 0; // 统计个数
for(int i = 1; i <= 9; i++)
if(cnt[i]) ans += 1;
printf("%d\n", ans);
for(int i = 1; i <= 9; i++) // 输出所有01串
if(cnt[i]) printf("%d ", cnt[i]);
return 0;
}
题解专栏 文章被收录于专栏
希望不断进步