給一個由 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);
}