@MIYA112412

Почему в обоих массивах выводятся одинаковые элементы? И почему сумма элементов обоих массивов не равна просто сумме всех элементов общего массива?

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

#include "pch.h"
#include "lab3.h"
#include<ConIO.h>
#include <iostream>
#include <iomanip>
using namespace std;

void count(double* Mas, double* Mas1, int b, int k)  // Фукнция рассчета куч камней, их сумма
{
	int q = 0;
	int w = 0;
	int n = 0;
	int i = 0;
	for (int i = 1; i < b; ++i)
	{
		for (int r = 0; r < b - i; r++)
		{
			if (Mas[r] < Mas[r + 1])
			{
				// Обмен местами
				int temp = Mas[r];
				Mas[r] = Mas[r + 1];
				Mas[r + 1] = temp;
			}
		}
	}
	cout << "Отсортированые камни по уменьшению веса : " << endl;
	for (int i = 0; i < b; i++)
	{
		cout << setw(5) << Mas[i] <<"\t";
	}
	float sum = 0.0;
	float sum1 = 0.0;
	float sum2 = 0.0;
	for (int i = 0; i < b; i++) {
		sum += Mas[i];
	}
	cout << "\n" << "Вес всех кмней : ";
	cout << sum << endl;
	float l = sum / 2;
	int temp, temp1;
	for (int i = 0; i < b; i++)
	{
		int d;
		for (d = 0; d < b; d++)
		{
			if (l > sum1)
			{
				sum1 += Mas[d];
				temp = Mas[d];
				Mas1[d] = temp;
				q++;
				w++;
			}
			else
			{

			}
		}
	}
	n = q - 1;
	cout << "Куча №1: " << endl;
	for (int i = 0; i < n; i++)
	{
		cout << Mas1[i] << endl;
		sum2 += Mas1[i];
	}
	cout << "Вес 1 кучи : " << sum2 << endl;
	int y = 0;
	int x = b - 1;
	for (int i = 0; i < b; i++)
	{
		int d;
		for (; q < x; x--)
		{
			if (l > sum2)
			{
				sum2 += Mas[x];
				temp = Mas[x];
				Mas1[n] = temp;

				n++;
			}
			else
			{

			}
		}
	}
	int v = n - 1;
	sum1 = 0;
	cout << "Куча №2 (з добавлением самых легких камней): " << endl;
	for (int i = 0; i < v; i++)
	{
		cout << Mas1[i] << endl;
		sum1 += Mas1[i];
	}
	cout << "Вес 2 кучи : " << sum1 << endl;
	system("pause");
	return;
	_getch();
}

void Ruchnoi(double* Mas, double* Mas1, int b, int k)  //  ручной ввод элементов массива (камней, их веса)
{
St:
	int t = 0;
	system("cls");
	cout << "Введите количество Введите количество камней" << endl;
	cin >> b;
	if (b < 0)
	{
		cout << "Колличество камней не может быть меньше 0" << endl;
		cout << "Повторите ввод" << endl;
		system("pause");
		goto St;
	}
	cout << "Вес камней должен быть больше 0" << endl;

	for (int i = 0; i < b; i++) {
	St1:
		cout << "Вводите елемент №[" << i + 1 << "] > ";
		cin >> Mas[i];
		if (Mas[i] <= 0) {
			cout << "ERROR" << endl;
			cout << "Вес камня не может быть меньше 0 повторите ввод" << endl;
			goto St1;
		}

	}
	for (int i = 0; i < b; i++)
	{
		int j = 0;
		j++;

		if (Mas[i] == Mas[j])
		{
			t++;
		}
	}
	if (t == b)
	{
		cout << "Похоже что все єлементы масива одинаковые\nПовторите ввод!" << endl;
		system("pause");
		goto St;
	}
	else
	{
		cout << "Нажмите Enter. Что бы отсортировать камни в порядку уменьшения веса." << endl;
		system("pause");
		count(Mas, Mas1, b, k);
	}

	return;
	_getch();
}

void random(double* Mas, double* Mas1, int b, int k)  // случайная генерация элементов массивов(камней)
{
	system("cls");
	int i;
	cout << "Введите количество камней" << endl;
	cin >> b;
	cout << "Компьютер сгенерировал вес камней" << endl;
	double D1, D2;
	D1 = 0;
	D2 = 200 * 100;
	for (int i = 0; i < b; i++)
	{
		int temp = int(D1) + rand() % int(D2);
		Mas[i] = temp / 100;
	}
	for (i = 0; i < b; i++)
	{
		cout << Mas[i] << endl;
	}
	system("pause");
	count(Mas, Mas1, b, k);
	_getch();
	return;
}

void MenuCreate(double* Mas, double* Mas1, int b, int k)  // меню
{ 
	bool While = true;
	int a;
Start:
	system("cls");
	cout << "Отсортировать камни в порядке уменьшения веса, выбирать самые тяжелые камни и отправлять в первую кучу до тех пор, пока вес кучи не превысит половину суммарного веса камней. Убрать из кучи последний добавленный камень, так что ее вес станет меньше половины суммарного веса камня. Далее добавлять в кучу поочередно легче камней опять-таки до тех пор, пока вес камней в куче не превысит половину суммарного веса камней. Вывести этот вариант разделения камней и предыдущий, без последнего добавленного камня" << endl;
	cout << "Выберете пункт нажатием на клавишу" << endl;
	cout << "1 - Записать вес камней вручную с клавиатуры" << endl;
	cout << "2 - Записать вес камней случайно компьютером" << endl;
	cout << "3 - Выход" << endl;
	while (While) {
		cin >> a;
		switch (a)
		{
		case 1:
			Ruchnoi(Mas, Mas1, b, k);
			goto Start;
			break;
		case 2:
			random(Mas, Mas1, b, k);
			goto Start;
			break;
		case 3:
			delete[] Mas;
			exit(0);
		default:
			system("cls");
			cout << "error\n";
			cout << "Попробуйте еще раз\n";
			system("pause");
			goto Start;
			break;
		}
	}
	cout << "Нажмите Enter. Что бы отсортировать камни в порядку уменьшения веса." << endl;
	system("pause");
	return;
	_getch();
}

void main()
{

	int b = 0;
	int k = 0;
	double* Mas = new double[9999];
	double* Mas1 = new double[9999];
	setlocale(LC_ALL, "rus");
	srand(time(NULL));
	MenuCreate(Mas, Mas1, b, k);
	return;
	_getch;

}
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы