Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 14.06.2018, 13:21   #1
holber
Новичок
 
Регистрация: 12.06.2018
Сообщений: 7
Репутация: 10
По умолчанию В списке удалить элементы равные полусумме своих соседей C++

Список из n целых чисел a1, a2, ..., an, Удалить элементы равные полусумме своих соседей в Исходном списке.Помогите пожалуйста
Например при вводе при тестировании на списке 12359 не правильно выводит результат: 91 ,удаление должно происходить в исходном списке
Код:

#include <iostream>
using namespace std;

struct element //Структура с инфополями и адресным полем
{
	int x; //Инфополе. значения из x будут передаваться в список
	element *Next; //Адресное поле
};

class List //Класс Список
{
	element *Head; //Указатель на последний активный элемент или просто голова списка
public:
	List() { Head = NULL; } //Конструктор и инициализация указателя пустым значением
	~List(); //Деструктор
	void Add(int x); //Функция для добавления значений в список
	void Show(); //Функция для отображения списка на экране
	bool try_to_del_element();
	void dell_them_all();
	void PoslList();
};

List::~List() //Деструктор вынесен за класс
{
	while (Head)  //Пока по адресу не пусто 
	{
		element *temp = Head->Next; //Временная переменная для хранения адреса следующего элемента
		delete Head; //Освобождаем адрес обозначающий начало
		Head = temp; //Меняем адрес на следующий
	}
}

void List::Add(int x) //Функция добавления элементов в список
{
	element *temp = new element; //При каждом вызове выделяется память
	temp->x = x; //Записываем x в элемент структуры  element (в x структуры element)
	temp->Next = Head; //Указываем, что след. элемент это объект по адресу Head
	Head = temp; //Указываем, что последний активный элемент это только что введенный
}

void List::Show() //Функция отображения списка на экране
{
	element *temp = Head; //Определяем указатель, который изначально он равен адресу начала списка

	while (temp != NULL) //До тех пор пока не встретит пустое значение
	{
		cout << temp->x << " "; //Выведет элемент x из списка
		temp = temp->Next; //Указываем, что далее нам нужен следующий элемент
	}
}

bool List::try_to_del_element() // при вводе 1 2 3 5 9 // удалит элементы пока не false
{
	bool deleted = false;
	element *prev, *current, *next;
	current = Head;
	while ((prev = current) != NULL && (current = prev->Next) != NULL && (next = current->Next) != NULL)
	{
		if (prev->x + next->x == 2 * current->x)
		{
			prev->Next = next;
			delete current;
			current = next;
			deleted = true;
		}
	}
	return deleted;
}

void List::dell_them_all()
{
	while (try_to_del_element());
}

int main()
{
	setlocale(0, "rus");
	int N; //Число элементов в список
	int x; //Элементы вводимые в список
	List lst; //Переменная, тип которой список

	cout << "Введите размер списка: ";//7
	cin >> N; //Указали сколько элементов вводить в список

	for (int i = 0; i<N; i++)
	{
		cout << "A[" << i + 1 << "] = ";// 1 2 3 4 6 9 11
		cin >> x; //Ввод x с клавиатуры
		lst.Add(x); //Добавление элемента в список
	}
	cout << "\nТекущий список:\n";
	lst.Show(); //Вывод списка на экран

	lst.dell_them_all();
	cout << "\nРезультат:\n";
	lst.Show();// 1 2 6 9 11 удалены 3 и 4 
	system("pause");
	return 0;
}

holber вне форума   Ответить с цитированием
Старый 14.06.2018, 15:21   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,354
Репутация: 5274
По умолчанию

Цитата:
Сообщение от holber Посмотреть сообщение
при тестировании на списке 12359 не правильно выводит результат: 91
ну да, должен получится список 1 9
1 2 3 5 9 (2 = (1+3)/2) => 1 3 5 9 =>
1 3 5 9 ( 3 = (1+5)/2 ) => 1 5 9 =>
1 5 9 ( 5 = (1+9) / 2 ) => 1 9
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 14.06.2018, 16:29   #3
holber
Новичок
 
Регистрация: 12.06.2018
Сообщений: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну да, должен получится список 1 9
Факт в том, что препод сказал, должно остаться 159.Т.к список уже поменялся.А в условии мол написано, что нужно удалить элементы в исходном списке
holber вне форума   Ответить с цитированием
Старый 14.06.2018, 16:31   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,950
Репутация: 6285
По умолчанию

Цитата:
Факт в том, что препод сказал, должно остаться 159.Т.к список уже поменялся.А в условии мол написано, что нужно удалить элементы в исходном списке
тогда и тройку не надо удалять по той же причине
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 14.06.2018, 16:36   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,354
Репутация: 5274
По умолчанию

Цитата:
Сообщение от holber Посмотреть сообщение
Факт в том, что препод сказал, должно остаться 159
ошибается ваш препод.
спросите его, куда из списка делась тройка ("3").
и чем пятёрка хуже тройки.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 14.06.2018, 17:00   #6
holber
Новичок
 
Регистрация: 12.06.2018
Сообщений: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
тогда и тройку не надо удалять по той же причине
Допустим, что 3 тоже должна остаться, как изменить тогда данную функцию
holber вне форума   Ответить с цитированием
Старый 14.06.2018, 17:31   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,354
Репутация: 5274
По умолчанию

Цитата:
Сообщение от holber Посмотреть сообщение
Допустим, что 3 тоже должна остаться, как изменить тогда данную функцию
вызвать вместо метода удаления всех
Цитата:
Сообщение от holber Посмотреть сообщение
Код:

List::dell_them_all()

метод

Цитата:
Сообщение от holber Посмотреть сообщение
Код:

List::try_to_del_element()

Код:

	cout << "\nТекущий список:\n";
	lst.Show(); //Вывод списка на экран

	lst.try_to_del_element();
	cout << "\nРезультат:\n";
	lst.Show();// 1 2 6 9 11 удалены 3 и 4

Serge_Bliznykov вне форума   Ответить с цитированием
Старый 14.06.2018, 17:58   #8
holber
Новичок
 
Регистрация: 12.06.2018
Сообщений: 7
Репутация: 10
По умолчанию

Спасибо
holber вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найдите трехзначные числа, равные сумме кубов своих цифр. Подсчет суммы кубов организовать в виде функции. Julia_Sv Паскаль 0 02.04.2016 14:32
Задан одномерный массив. Все его элементы, не равные нулю Vadim228 Паскаль 5 23.12.2015 08:59
Перенести все элементы равные K в конец Cip Assembler 1 12.12.2015 00:25
Удалить из массива все элементы, равные х. Biohazard251 Паскаль 4 18.12.2012 10:12
Удалить столбцы содержащие элементы равные 0 на Visual Basic .NET Monqer Помощь студентам 0 13.02.2012 21:27


20:13.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru