深度优先搜索---寻找数字字符串中缺失的数字

来源:互联网 发布:怎样申请旺旺淘宝账号 编辑:程序博客网 时间:2024/06/06 00:50

给一个由 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[31]={0};void f(int curr,char a[])//n表示已经有的数的个数 {    if(curr==strlength)//这种情况下,找到了缺失的数     {        cout<<"find!!!!"<<endl;        for(int i=1;i<=num;i++)        {            cout<<flag[i]<<" ";            if(flag[i]==0)            {                cout<<"缺少的数字是:"<<i<<endl;//注意这个地方的找到缺少的数字之后还会退出这个函数继续寻找,但是其余的情况都不会再来到这个位置了             }        }         return;    }    int currnum=a[curr]-48;    if(currnum<=num&&flag[currnum]==0)    {        cout<<"current:"<<currnum<<endl;        flag[currnum]=1;        f(curr+1,a);        cout<<"current:"<<currnum<<endl;        flag[currnum]=0;    }    currnum=currnum*10+a[curr+1]-48;    if(currnum<=num&&flag[currnum]==0)    {        cout<<"current:"<<currnum<<endl;        flag[currnum]=1;        f(curr+2,a);        flag[currnum]=0;    }}int main(){    char aa[30];    cin>>num;    cin>>aa;    strlength=strlen(aa);    f(0,aa);} 
原创粉丝点击