天天看點

深度優先搜尋---尋找數字字元串中缺失的數字

給一個由 1 - n 的整數随機組成的一個字元串序列,其中丢失了一個整數,請找到它。

注意事項

n <= 30

樣例

給出 n = 20, str = 19201234567891011121314151618

丢失的數是 17 ,傳回這個數。

//深度優先搜尋算法
//給一個由1-n的整數随機組成的一個字元串序列,其中丢失一個整數,請找到它 注意這裡n<=30 
//例如 n=20,str="1918171615141312111098764321"丢失的數是5
//注意,如果在數組而不是字元串中找 未出現的數,可以直接求和,然後在做差,但是這種方法比較耗時;另一種方法可以
//将該數組中的所有的數字和所有數字異或,得到的結果就是缺失的那個數 
#include<iostream>
#include<string.h>
using namespace std;
int num;//即為題目中的範圍 
int strlength;//字元串的長度 
int flag[]={};
void f(int curr,char a[])//n表示已經有的數的個數 
{
    if(curr==strlength)//這種情況下,找到了缺失的數 
    {
        cout<<"find!!!!"<<endl;
        for(int i=;i<=num;i++)
        {
            cout<<flag[i]<<" ";
            if(flag[i]==)
            {
                cout<<"缺少的數字是:"<<i<<endl;//注意這個地方的找到缺少的數字之後還會退出這個函數繼續尋找,但是其餘的情況都不會再來到這個位置了 
            }
        } 
        return;
    }
    int currnum=a[curr]-;

    if(currnum<=num&&flag[currnum]==)
    {
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=;
        f(curr+,a);
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=;
    }
    currnum=currnum*+a[curr+]-;
    if(currnum<=num&&flag[currnum]==)
    {
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=;
        f(curr+,a);
        flag[currnum]=;
    }
}
int main()
{
    char aa[];
    cin>>num;
    cin>>aa;
    strlength=strlen(aa);
    f(,aa);
} 
           

繼續閱讀