1.题目描述:点击打开链接
2.解题思路:本题利用扫描法解决。一开始想复杂了,把所有的01组成的数字全部都列举了出来,想一个个尝试。结果到最后也没能写成,放弃了。比赛后发现思路其实非常简单。把每一位的数字看做一根柱子的高度,逐层扫描即可。如果第j位的数字大于当前层i,那么这一位设置为1,否则设置为0。可以发现,最终的答案就是输入的数字中最大的那一位数,而设置每一位的值恰好可以利用string来方便的实现。
本题值得学习的地方是max_element函数的和atoi函数的使用。
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<functional> using namespace std; vector<string>ans; string str; int main() { //freopen("t.txt", "r", stdin); while (cin >> str) { ans.clear(); int k = *max_element(str.begin(),str.end()) - '0'; cout << k << endl; for (int i = 0; i < k; i++)//逐层扫描 { string s; for (int j = 0; j < str.size(); j++) s += (i < (str[j] - '0')) ? '1' : '0'; cout << atoi(s.c_str()) << ' '; } cout << endl; } return 0; }
#300 (div.1 2) B. Quasi Binary
原文地址:http://blog.csdn.net/u014800748/article/details/45309195