美團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;
}
最後,代碼有問題請指正。謝謝
相關文章
相關標籤/搜索