Member 13192781 Ответов: 2

Поиск недостающего числа в целочисленном массиве (вопрос от geeksforgeeks.com)


Мне дан массив целых чисел, где целые числа отсортированы в порядке возрастания, а разница между соседними элементами равна единице, за исключением конкретной пары целых чисел, где разница равна двум. Я должен найти недостающее целое число. Я написал код и до сих пор не вижу в нем никаких проблем, но необходимый вывод не производится. Я хотел бы, чтобы вы помогли мне понять ошибку в моем коде.

Пример: 11 12 13 15
Недостающее число-14

Пример: 3 5 6 7
Недостающее число 4

Что я уже пробовал:

Это мой код. Я получаю вывод как 12 для приведенных ниже значений массива.
<pre>// ConsoleApplication2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <iso646.h>
#include <vector>
#include <string>
#include<iostream>
#include <algorithm>


using namespace std;

int FindMissingNumber(vector<int>& nums)
{
	int result = 0;

	//sort(nums.begin(), nums.end());

	for (int i = 0; i < nums.size(); i++)
	{
		for (int j = i + 1; j < nums.size() - 1; j++)
		{
			if (nums[j] - nums[i] == 2)
			{				
				result = (nums[i] + 1);
			}
		}
	}

	return result;
}

int main() {
 
	vector<int> nums = { 10, 11, 12, 13, 15 };

		cout << FindMissingNumber(nums) << endl;	

	system("pause");
	return 0;
}

Peter_in_2780

Большой намек. Вам нужна только одна петля.

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я написал код и до сих пор не вижу в нем никаких проблем, но необходимый вывод не производится.

Как уже было сказано, используйте отладчик, чтобы увидеть, что делает ваш код.
Подумайте о том, что вам нужно сделать, чтобы решить проблему вручную, и посмотрите, что ваш код делает с отладчиком.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
16

CPallini

Логика вашего FindMissingNumber функция испорчена. Попробуй:

#include <vector>
#include <string>
#include <iostream>


using namespace std;

bool FindMissingNumber(const vector<int>& nums, int & result)
{
  for (size_t i = 0; i < nums.size()-1; i++)
  {
    if ( nums[i] != nums[i+1]-1)
    {
      result = (nums[i]+1);
      return true;
    }
  }
  return false;
}

int main()
{
  vector<int> nums = { 10, 11, 12, 13, 15 };

  int result;
  if ( FindMissingNumber( nums, result) )
    cout << "missing number is " << result << endl;
  else
    cout << "there is no missing number" << endl;
  return 0;
}


Maciej Los

5ед!

CPallini

Большое спасибо!