C++ 在数组中查找缺少的数字

C++ 在数组中查找缺少的数字,c++,arrays,loops,for-loop,C++,Arrays,Loops,For Loop,我想要一个函数,它可以浏览任意大小的自然数数组({0,1,2…}),并找到缺少的值 我的意思是,如果数组是,例如:{0,1,3,4,5},我希望函数返回2,如果数组是{1,3,0,4},我希望函数返回2,依此类推 我的尝试是: int missing(int* t, int r) { int i; int sum=0; sum=(r+1)*(r+2)/2; for(i=0;t[i];i++){ sum-=t[i]; } return

我想要一个函数,它可以浏览任意大小的自然数数组({0,1,2…}),并找到缺少的值

我的意思是,如果数组是,例如:{0,1,3,4,5},我希望函数返回2,如果数组是{1,3,0,4},我希望函数返回2,依此类推

我的尝试是:

int missing(int* t, int r) {
    int i;
    int sum=0;
    sum=(r+1)*(r+2)/2;
    for(i=0;t[i];i++){
        sum-=t[i];
    }
    return sum;
}
其思想是首先计算从1到n的和,然后从这个和中分别减去数组中的每个数字。但是,该程序返回的是不减去数组中的数字的总和


为什么它不能正常工作?

使用条件
i
代替
t[i]
。序列的第一个值为零,因此不遍历循环

此外,您还可以使用算法的优化版本(不幸的是,我并没有机会测试代码——这只是针对排序数组的想法)

int res=0;
对于(inti=0;i
使用条件
i
代替
t[i]
。序列的第一个值为零,因此不遍历循环

此外,您还可以使用算法的优化版本(不幸的是,我并没有机会测试代码——这只是针对排序数组的想法)

int res=0;
对于(inti=0;i?(i=0;t[i];i++)的
这毫无意义-你是说(i=0;i
int res = 0;
for (int i = 0; i < r && t[i] == res; ++i, ++res) ;