Как мне поставить любое значение X после всех минимумов в массиве?

Если я введу array сначала код находит minimums тогда я хочу поставить нули после всех минимумов. Например
given an array знак равно 1,1,3,1,1
Как мы видим 1s являются минимальными, поэтому результат должен быть = 1,0,1,0,3,1,0,1,0

КОД

#include <pch.h>
#include <iostream>int main()
{

int min = 10000;
int n;
std::cout << "Enter the number of elements (n): "; //no of elements in the
std::cin >> n;                                     //array

int *array = new int[2 * n];

std::cout << "Enter the elements" << std::endl;for (int i = 0; i < n; i++) {
std::cin >> array[i];
if (array[i] > min)
min = array[i];
}

for (int i = 0; i < n; i++) {

if (array[i] == min) {                   // Not very clear about this
for (int k = n; k > i; k--)          // part of the code, my teacher
array[k] = array[k - 1];        //explained it to me , but i
array[i + 1] = 0;               // didn't understand (from the
i++;                            // `for loop k` to be precise)
n++;
}
std::cout << array[i] << ", 0";
}return 0;
}

Но мой ответ не ставит нули точно после минимумов

0

Решение

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

#include "stdafx.h"#include <iostream>int main()
{
int min = 10000;
bool found = 0;
int n;
std::cout << "Enter the number of elements (n): "; //no of elements in the
std::cin >> n;                                     //array

int *array = new int[2 * n];

std::cout << "Enter the elements" << std::endl;for (int i = 0; i < n; i++) {
std::cin >> array[i];
if (array[i] < min) //< instead of >
min = array[i];
}

for (int i = 0; i < n; i++) {

if (array[i] == min)
{
for (int k = n; k > i; k--)
{
array[k] = array[k - 1];
}
array[i + 1] = 0;
i++; //increment i here because you don't want to consider 0 that you have just added above.
n++; //since total number of elements in the array has increased by one (because of 0 that we added), we need to increment n
}
}

//print the array separately
for (int i = 0; i < n; i++)
{
std::cout << array[i];
if (i != n - 1)
{
std::cout << ",";
}
}

return 0;
}
0

Другие решения

Первый вопрос был в расчете min: < вместо >,

Еще одна проблема, если вы изменяете параметры iа также nвнутри петли. Это довольно опасно и подразумевает быть очень осторожным.

Другая проблема заключалась в том, что это должно быть i++; n++; вместо i--,n--;

Вот код:

//  #include <pch.h>
#include <iostream>int main()
{
int min = 1000000;
int n;
std::cout << "Enter the number of elements (n): "; //no of elements in the
std::cin >> n;                                     //array

int *array = new int[2 * n];

std::cout << "Enter the elements" << std::endl;

for (int i = 0; i < n; i++) {
std::cin >> array[i];
if (array[i] < min)
min = array[i];
}

for (int i = 0; i < n; i++) {
if (array[i] == min) {                   // Not very clear about this
for (int k = n; k > i; k--)          // part of the code, my teacher
array[k] = array[k - 1];        //explained it to me , but i
array[i + 1] = 0;               // didn't understand (from the)
i++;
n++;
}
}

for (int i = 0; i < n; i++) {
std::cout << array[i] << " ";
}
std::cout << "\n";

return 0;
}
0

По вопросам рекламы [email protected]