美团2018年春招编程题

题目:给定字符串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;
}
最后,代码有问题请指正。谢谢
相关文章
相关标签/搜索