題目:給定字符串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; }
最後,代碼有問題請指正。謝謝