MT43. 数字字符
描述
在十进制表示中,任意一个正整数都可以用字符 ’0’-‘9’ 表示出来。但是当 ’0’-‘9’ 这些字符每种字符的数量有限时,可能有些正整数就无法表示出来了。比如你有两个 ‘1’ ,一个 ‘2’ ,那么你能表示出 11,12,121 等等,但是无法表示出 10,122,200 等数。输入描述
第一行包含一个字符串,表示你可以使用的字符。输出描述
输出你所无法组成的最小正整数示例1
输入:
55
输出:
1
示例2
输入:
123456789
输出:
10
C++ 解法, 执行用时: 2ms, 内存消耗: 488KB, 提交时间: 2021-11-12
#include <iostream> #include <cstdio> #include <vector> #include <stack> #include <cstring> using namespace std; int count_days(vector<int> & flowers){ int n = flowers.size(), ret = 0; stack<int> st; vector<int> left(n), right(n, n); for(int i=0; i<n; ++i){ while(!st.empty() && flowers[i] < flowers[st.top()]){ right[st.top()] = i; st.pop(); } left[i] = st.empty() ? -1 : st.top(); st.push(i); } // for(int i=0;i<n;++i)cout<<left[i]<<" ";cout<<endl; // for(int i=0;i<n;++i)cout<<right[i]<<" ";cout<<endl; for(int i=0; i<n; ++i){ int l = left[i] == -1 ? 0 : flowers[left[i]]; int r = right[i] == n ? 0 : flowers[right[i]]; ret += flowers[i] - max(l, r); } return ret; } string min_not_p(string str){ vector<int> cnt(10, 0); for(int i=0; i<str.length(); ++i){ ++cnt[str[i]-'0']; } string ret = ""; cnt[0] += 1; int minn = 9999999, idx=-1; for(int i=0;i<10;++i){ if(cnt[i] < minn){ minn = cnt[i]; idx = i; } } for(int i=0; i<minn; ++i){ ret += to_string(idx); } ret = idx == 0 ? to_string(1) + ret : ret + to_string(idx); return ret; } int main(){ int n; // while(cin >> n){ // vector<int> vec(n); // for(int i = 0; i < n; ++i)cin >> vec[i]; // cout<<count_days(vec)<<endl; // } string nums; while(cin>>nums){ cout<<min_not_p(nums)<<endl; } return 0; }
C 解法, 执行用时: 3ms, 内存消耗: 348KB, 提交时间: 2019-01-28
#include<stdio.h> int main(){ int a[10]={0,0,0,0,0,0,0,0,0,0}; char c; while((c=getchar())!=EOF){ a[c-48]++; } int t=1; for(int i=1;i<10;i++){ if(a[i]<a[t]){ t=i; } } for(int i=0;i<=a[t];i++){ putchar(t+48); } }