2016-11-07 2 views
0

Я хочу иметь функцию, которая будет просматривать массив натуральных чисел любого размера ({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 до п, чем вычесть из этой суммы каждое число в массиве отдельно. Однако программа возвращает общую сумму без вычитания чисел в массиве.

Почему он не работает правильно?

+0

'for (i = 0; t [i]; i ++)' это не имеет никакого смысла - вы имели в виду 'for (i = 0; i

ответ

2

Условия использования i < r вместо t[i]. Первое значение последовательности равно нулю, поэтому цикл не пройден

Более того, вы можете использовать оптимизированные версии алгоритма (к сожалению, у меня нет возможности проверить код - это просто идея только для отсортированного массива)

int res = 0; 
for (int i = 0; i < r && t[i] == res; ++i, ++res) ; 
Смежные вопросы