Member 13527256 Ответов: 2

У меня есть проблема с этой задачей


В этой задаче мы должны вывести длину самой длинной последовательности четных чисел, не деленных на 3, и чисел, не деленных на 7. Мы получаем элементы size_a (0<size_a<1000) в векторе. Каждый элемент (-1000 < Xi < 1000).

Ответ должен быть одним целым числом.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	int size_a;
	cin >> size_a;
	int  num = 1, num_max = 0;
	vector <int> v (size_a);
	for (auto i = 0; i < size_a; i++)
		cin >> v[i];
	//---------------------------------
	for (auto i = 1; i < size_a; i++)
	{
		if ((v[i - 1] % 7 != 0) && (v[i] % 7 != 0))
		{
			num++;
			if (num_max < num)
				num_max = num;
		}
		else if ((v[i - 1] % 2 == 0) && (v[i] % 2 == 0)) {
			if ((v[i - 1] % 3 != 0) && (v[i] % 3 != 0))
			{
				num++;
				if (num_max < num)
					num_max = num;
			}
		}
		else
			num = 1;
	}
	cout << num_max << endl;
}


Пример ввода данных:
5
100 53 23 19 31
Выход:
5
--
Пример ввода данных:
7
87 3 36 63 78 68 44
Выход:
3
------------------
В моей программе есть ошибка, которую я не могу найти - она работает на нескольких тестах, но в онлайн-проверке программ нашего колледжа она не проходит тест 7. Я не знаю, пример входных данных. Несколько человек в моей группе выполнили эту задачу, но не говорят мне, как это сделать.
Я ИСПОЛЬЗОВАЛ НА НЕМ ОТЛАДЧИК!!! НЕ ПРЕДЛАГАЙТЕ ЭТО КАК РЕШЕНИЕ!!!
Мне нужен фрагмент кода, содержащий ошибку и решение, как изменить ее, чтобы исправить.

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

-пытался отладить мою программу;
-спрашивал у некоторых других студентов моей группы, но они мне ничего не говорят;
-посмотрел эту проблему в интернете

phil.o

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

Member 13527256

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

Member 13527256

Отладчик не поможет вам найти ошибки с ответом в том случае, когда конкретное значение не задано, и вам придется думать о миллиарде причин. Вот такая ситуация. У меня нет списка ценностей; и поверьте мне: я пытался преодолеть эту проблему около двух недель, когда наконец нашел этот сайт.

phil.o

На первый взгляд, я вижу первую проблему. В вашем первом if утверждение, Вы не проверяете на четность значения, вы только проверяете, делится ли оно на 7. Ваш тест на ровность приходит только после того, как в else if заявление. В то время как ваш вопрос, по-видимому, состоит в том, чтобы найти самую длинную последовательность даже числа, не делящиеся на 3 и не делящиеся на 7.
Поэтому запишите некоторые тестовые случаи с четными числами, некоторые другие с нечетными числами, отладьте свой код с этими тестовыми случаями, и вы обнаружите, что он не будет вести себя в соответствии с требованием для нечетных значений, кратных 7.

Dave Kreskowiak

Отладчик предназначен для отладки вас и вашего понимания кода. Это ничего не говорит вам о вашем коде. Вы используете его как инструмент проверки, чтобы показать вам, какие данные, какие значения использует код, чтобы вы могли лучше понять, что он делает.

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

CPallini

Ваши требования мне не совсем ясны. Не могли бы вы их подробно описать?

Member 13527256

Вы вводите размер массива. Затем вы вводите числа - элементы этого массива. Среди этих элементов вы должны найти самую длинную последовательность чисел, не разделенных на 7, и четных чисел, не разделенных на 3. Вы должны вывести длину этой последовательности.

CPallini

Таким образом, каждая последовательность должна иметь следующие 3 свойства
(1) каждый пункт должен быть точно разделен на 7
(2) каждый пункт должен быть точно разделен на 2
(3) каждый пункт не должен точно делиться на 3
?

Member 13527256

Да, но не делится на 7.
Так:
(1) каждый пункт не должен быть точно разделен на 7
(2) каждый пункт должен быть точно разделен на 2
(3) каждый пункт не должен быть точно разделен на 3

CPallini

Тогда результат вашего первого примера неверен (только 100 точно делится на 2).

Member 13527256

Тогда я, возможно, не понял вас правильно. Все элементы не должны быть разделены на 7; Кроме того, все четные числа не должны быть разделены на 3. Таким образом, могут быть неравные числа, и они не должны быть разделены на 7.

CPallini

Ладно, это понятно.

CPallini

Однако с таким определением пример секунд был бы неправильным. Какова удовлетворительная последовательность?

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я ИСПОЛЬЗОВАЛ НА НЕМ ОТЛАДЧИК!!! НЕ ПРЕДЛАГАЙТЕ ЭТО КАК РЕШЕНИЕ!!!

отладчик только показывает, что делает код, ваша задача-проверить, соответствует ли он вашему алгоритму. Если вы не видите никаких проблем с отладчиком, то единственная возможность заключается в том, что алгоритм неверен.
Проанализируйте входные сигналы образца, проверяя только 7 достаточно, чтобы получить ответ.
Создайте свои собственные тестовые входы, которые имеют различные ситуации, и посмотрите, получите ли вы правильные ответы. если ответ неверен, то это ошибка в коде или алгоритме.
Первый тест имеет входной сигнал длины 1
Example of input:
1
100
Output:
1


[Обновление]
Цитата:
Да, это моя проблема - найти ошибки в моем алгоритме. Я пытался много раз, но не могу их увидеть, и именно поэтому я пишу на этот сайт.

Поиск алгоритма - это суть проблемы.
Возьмите лист бумаги и карандаш и потренируйтесь на образцах.
Из этого утверждения вы должны ответить на вопрос: "почему число является частью последовательности или нет?"
ответ-это ваш алгоритм.

Изучение метода анализа может помочь:
- У. Е. сверху вниз Djikstra способ это хорошее начало.
https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design[^]
https://en.wikipedia.org/wiki/Structured_programming[^]
https://en.wikipedia.org/wiki/Edsger_W._Dijkstra[^]
https://www.cs.utexas.edu/users/EWD/ewd03xx/EWD316.PDF[^]


Member 13527256

Да, это моя проблема - найти ошибки в моем алгоритме. Я пытался много раз, но не могу их увидеть, и именно поэтому я пишу на этот сайт.

Patrice T

Где вы видели, что 2 последовательных числа должны соответствовать одному и тому же условию?

Member 13527256

Ну, там могут быть любые цифры, которые вы хотите: 87 3 36 63 78 68 44. Они не обязательно должны быть последовательными.

Рейтинг:
13

OriginalGriff

Вы все время задаете один и тот же вопрос: "что не так с моим кодом?"

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

Итак: используйте отладчик. Снова.


Dave Kreskowiak

Отладчик не поможет мне справиться с проблемами в моем алгоритме

ЧЕРТ ВОЗЬМИ, ЭТОГО НЕ БУДЕТ! Именно для этого и нужен отладчик! Следуйте значениям переменных, и вы узнаете, как ваш текущий алгоритм работает или не работает там, где вы ожидаете, или даже если это неправильный подход или в нем есть ошибки!

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

Dave Kreskowiak

Ваш код не проходит тест с известным набором чисел. Все, что вам нужно сделать, это предоставить те же данные и по-прежнему использовать отладчик, чтобы увидеть, что ваш алгоритм делает с этими данными.

Простите, кто из нас опять "псих"? Это ты умоляешь людей сделать за тебя домашнее задание.