Как мне сделать «position:» в моем коде более точным?

1

Я, наконец, закончил этот код, но есть одна проблема: для вывода "Позиции:" я хочу, чтобы он выводил каждую позицию, где встречается минимум. Однако мой код выводит только последнюю позицию минимума в каждом произвольно сгенерированном массиве (размер 20). Пожалуйста, направьте меня на то, как я могу сделать эту программу менее избыточной при выводе нескольких позиций, где происходит минимум. Спасибо!

#include <iostream>
#include <iomanip>
using namespace std;

double random(unsigned int &seed);
unsigned int seed = (unsigned int)time(0);
const int SIZE = 20;

void print_array (int a[]);
void fill_array (int a []);
int find_min (int [], int);

int main ()
{
  int arr[SIZE];
  cout << "Arrays: \n";
  fill_array(arr);
  print_array(arr);

  int pos = find_min(arr, SIZE); 
  int minimum = arr[pos];

  cout << "Min is: " << minimum << endl;
  cout << "At position: " << pos +1 << endl; 

  return 0;
  }

double random(unsigned int &seed)
{
   const int MODULUS = 15749;
   const int MULTIPLIER = 69069;
   const int INCREMENT = 1;
   seed = ((MULTIPLIER*seed)+INCREMENT)%MODULUS;
   return double(seed)/MODULUS;
   }

void fill_array (int a [])
{
   for (int i = 0; i < SIZE; ++i)
      a[i] = 0 + (10 * (random(seed)));
}

int find_min (int arr[], int n)
{
   int min = arr[0]; 
   int index = 0;

   for (int i = 1; i < n; ++i)
     if (arr[i] < min) 
     {
        index = i;
        min = arr[i];
     }
   return index;
 }

 void print_array (int a[])
 {
    for (int i = 0; i <SIZE; ++i)
      cout << setw(3) << a[i];
 cout << endl;
 }
  • 1
    Я понятия не имею, о чем ты просишь. Пожалуйста, прочитайте, как задавать вопросы
  • 0
    ОП хочет снова посмотреть в массиве, чтобы найти минимальное значение и вывести каждый индекс, содержащий это значение.
Показать ещё 5 комментариев
Теги:

1 ответ

0
Лучший ответ

Вы можете достичь своей цели, изменив свой main. См. Ниже код

int main ()
{
  int arr[SIZE];
  cout << "Arrays: \n";
  fill_array(arr);
  print_array(arr);

  int pos = find_min(arr, SIZE); 
  int minimum = arr[pos];

  //The following loop traverses through the array and prints the position when array element is equals to minimum
  for (int i = pos; i < SIZE; i++) {
     if (arr[i] == minimum)
       cout << "Min is at: " << i+1 << endl;    
  }

  cout << "Min is: " << minimum << endl;
  cout << "At position: " << pos +1 << endl; 

  return 0;
}

EDITED: для печати в одной строке вы можете сделать что-то вроде следующего кода:

cout << "Min is at: "
for (int i = pos; i < SIZE; i++) {
         if (arr[i] == minimum) {

             if (i != pos) cout << ", ";

             cout << i+1 << endl;


         }

 }

Однако есть много вариантов форматирования. Вы можете использовать любой из них.

  • 0
    большое спасибо! Хотя я собирался попробовать цикл for, я колебался при использовании условия if (arr [i] == минимум). Спасибо еще раз! Не большая проблема, но мне было интересно, как я могу вывести «Min at at:» в виде списка в одну строку? Такие как: «Мин: 2, 6, 9» вместо
  • 0
    Правильно. Я пропустил это. Спасибо, что выяснили. Ред.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню