题目:给定字符串s(只包含‘0’-‘9’这些数字),找出s中数字不能组成的最小正整数。s的长度n,1<=n<=1000 例子1:输入:"5546" 输出: 1 例子2:输入:“123456789” 输出: 10ios
**分析**:能够分为三种状况找最小数字 - 1.给定输入字符串s中缺乏某个字符,那么缺乏就是最小。如例1 - 2.给定输入字符串s中缺乏‘0’,那么10最小。如例2 - 3.全部数字都出现至少一次时,出现次数最小的那个数的叠数最小。 **_ 举例1:_** 输入字符串:112233445567788990 输出:66 **_ 举例2:_** 输入字符串:1122334455667788990 输出:100
#include <iostream> #include <string> using namespace std; /*例如出现字符串为:112233445667788990,字符串中5这个数字只出现一次,因此最小正整数为为55*/ void hanshu(int a,int b,int c){ int sum=0; if(a>=b) { int i=1; b=b+1; while(b--){ sum = sum+c*i; i=i*10; } cout<<sum; } else { a=a+1; int j=1; while(a--) { sum=10*j; j=j*10; } } cout<<sum; } int main(int argc, char *argv[]) { string s; int t=0; int temp=0; int flag; cin>>s; int num=s.size(); int a[10]={0}; /*判断每一个数字出现几回*/ for(int i=0;i<num;i++){ int j=s[i]-'0'; a[j]++; } /*判断是否有缺乏数字,如缺乏最小的数字为答案*/ for(int k=1;k<10;k++){ if(a[k]==0){ cout<<k; break; } else t++; } /*当全部数字都至少出现一次时,1-9中出现次数最小的数组成答案*/ if(a[0]!=0) { temp=a[1]; for(int g=2;g<10;g++) { if(a[g]<temp) { temp=a[g]; flag=g; } } int b=a[0]; hanshu(b,temp,flag); } else cout<<10; }
最后,代码有问题请指正。谢谢