@NikitkOS

Как исправить заполнение массива минимальными значениями другого массива?

Суть программы такова: нужно записать в массив minimumArray пять минимальных элементов массива yourArray, добавляя при этом в массив busyI значения i из цикла, которые уже были использованы и при проверке переходить к следующему значению i при вызове функции из main.
Программа работает правильно, но если нулевой элемент массива yourArray является одним из пяти минимальных элементов, то i = 0 циклично добавляется в busyI, и я не особо понимаю почему. Возможно ли как-то пофиксить этот мой "чудо"-код?
P.S. знаю, что можно это сделать все намного проще - через ту же сортировку, но мне захотелось так, поэтому прошу не переписывать полностью весь код, используя какой то другой метод, а указать на ошибки, которые нужно исправить.

const int lengthArr = 10, lengthArr2 = 5;
int yourArray[lengthArr], minimumArray[lengthArr2], busyI[lengthArr2] = {-1, -1, -1, -1, -1};
static int arrTwo = 0;

//функция заполнения массива yourArray рандомными числами 

void writeMinimum(int arr[], int arrI[]) {
	int minI = 0, min1 = arr[minI], breakVar = -1;
	for (int i = 0; i < lengthArr; i++) {
		for (int k = 0; k < arrTwo; k++) {
			if (i == arrI[k]) {
				breakVar = i;
				break;
			}
		}
		if (breakVar == 0) {
			break;
		}else if ((arr[i] < min1) && (i != breakVar)) {
			min1 = arr[i];
			minI = i;
		}
	}
	arrI[arrTwo] = minI;
	minimumArray[arrTwo] = min1;
	arrTwo++;
}

int main()
{
       // Вызов функции заполнения массива
	for(int i = 0; i < lengthArr2; i++){
	writeMinimum(yourArray, busyI);
	}
	system("pause");
	return 0;
}
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Когда находите минимальный элемент в исходном массиве сохраняйте его значение и индекс, заменяйте в исходном массиве значение минимального элемента на некоторое максимально возможное число (INT_MAX в вашем случае). Повторяйте процедуру пока не заполнится весь массив минимумов.
Затем нужно восстановить исходный массив по ранее сохраненной информации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы