Дан массив. Найти строку, сумма элементов которой минимальна?

241
29 июня 2018, 02:50

Нужна помощь с реализацией задачи на С++, как пишется она на паскале я понял, а вот перевести ее на С++ затрудняюсь, суть программы. Дан массив А[3][3], заполняется рандомно. Найти строку, сумма элементов которой минимальна, и умножить на минимальную сумму каждый элемент матрицы. Помогите, пожалуйста ее реализовать на с++, заранее благодарен. ТО как я его реализовал на С++

     #include <iostream>
#include <cstdlib>
using namespace std;
int main() {
  int s,t,min=100;
  int a[3][3];
  int x[3][3];
  for(int i=0; i<3; i++){
    s=0;
    for(int j=0; j<3; j++){
      a[i][j] = -100 + rand() % 100;
      cout<<a[i][j]<<" ";
      s=s+a[i][j];
      if(s<min){
        min=s;
        t=i;
      }
    }
  }
  cout<<"\n";
  cout<<"Сумма: "<<s<<"\n";
  cout<<"Min = "<<t<<"\n";
  for(int i=0; i<3; i++){
    for(int j=0; j<3; j++){
      x[i][j]=a[i][j]*min;
      cout<<x[i][j]<<" ";
    }
  }
}
Answer 1
#include <cstddef>
#include <random>
#include <ctime>
#include <limits>
int main()
{
    constexpr std::size_t m = 3;
    constexpr std::size_t n = 3;
    int a[m][n];
    std::default_random_engine dre(std::time(nullptr) );
    std::uniform_int_distribution<> uid(-10, 10);
    int min = std::numeric_limits<int>::max();
    int temp = 0;
    for (std::size_t i = 0; i < m; ++i)
    {
        for (std::size_t j = 0; j < n; ++j)
        {
            a[i][j] = uid(dre);
            temp += a[i][j];
        }
        if (temp < min)
            min = temp;
        temp = 0;
    }
    for (std::size_t i = 0; i < m; ++i)
        for (std::size_t j = 0; j < n; ++j)
            a[i][j] *= min;
    return 0;
}
Answer 2

На С++ можно решать многими способами. Например класс valarray для таких задач очень удобно использовать. Но так как речь идет о С_ массивах, код становится более обьемным. Например:

#include <iostream>
#include <random>
#include <algorithm>
using namespace std;    
int main()
{        
    const int row = 3, column = 3;
    int array[row][column];
    random_device rd;
    mt19937 gen(rd());
    uniform_int_distribution<int> dist(-100, 100);
    int min{100 * column};
    // инициализация, расчет минимальной суммы и вывод массива 
    for (size_t i = 0; i < row; ++i) {
        for(size_t j = 0; j < column; ++j) {
            array[i][j] = dist(gen);
            cout <<array[i][j] <<' ';
        }
        int k = std::accumulate(array[i], &array[i][column], int());
        if(k < min) min = k;
        cout  << endl;
    }
    // умножим на min все элементы массива
    std::transform(array[0], &array[row][0], array[0], [&](int i) {return i * min;});
    // теперь взглянем на результат
    for (int i = 0; i < row; ++i) {
        cout << endl;
        for (int j = 0; j < column; ++j)
            cout << array[i][j] << ' ';
    }
    return 0;
}
READ ALSO
iconv всегда EILSEQ

iconv всегда EILSEQ

iconv всегда выдает ошибку EILSEQ с указанием на последний символ, что не так?

211
Определение геолокации. Клиентский JS

Определение геолокации. Клиентский JS

Как определить геолокацию пользователя? Как я понял это делается через

184
График из 1000000 точек

График из 1000000 точек

Необходимо построить line график на странице, который содержит в себе примерно миллион (+- 1000) точекЛучший вариант - изображать только часть...

350