给一个由 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);
}