-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
1

Найти в матрице строку, сумма элементов которой наибольшая

30.01.2017, 15:00. Показов 6240. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, добрый день
Объясните как заполнить его случайными значениями в пользовательском диапазоне +
Найти строку, сумма элементов которой наибольшая

По возможности прокомментируйте каждое действие
ЗА РАНЕЕ БЛАГОДАРЕН!!!

Описать двумерный целочисленный массив 2 строки на 8 столбцов.
Заполнить его случайными значениями в пользовательском диапазоне.
Найти строку, сумма элементов которой наибольшая.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<time.h>
using namespace std;
void main()
{
    setlocale(LC_ALL, "Russuan");
    srand(time(NULL));
 
 
    const int l = 2, col = 8;
    int array[l][col];
    int n, sum = 0;
    cout << " Введите число : ";
    cin >> n;
    for (size_t i = 0; i < l; i++)
    {
        for (size_t j = 0; j < col; j++)
        {
 
        }
    }
}
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2017, 15:00
Ответы с готовыми решениями:

Найти строку, сумма элементов которой наибольшая
Описать двумерный целочисленный массив 4 строки на 2 столбцов. Заполнить его случайными значениями...

Составить программу, в которой определяется строка, сумма элементов которой наибольшая
Задана квадратная матрица. Составить программу, в которой определяется строка, сумма ...

Дано двумерный массив целых чисел. Найти номер строки, в которой сумма отрицательных нечетных элементов наибольшая
помогите Пожалуста с задачей я не знаю как правильно прописать, чтоб он выводил число строки(((...

Поиск строки, сумма элементов которой наибольшая, в матрице из целых чисел
Написать программу,реализующую поиск строки сумма элементов которой наубольшая в матрице из целых...

24
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
30.01.2017, 16:06 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cstdlib>
#include <time.h>
int main ()
{
    srand(time(NULL));
    const int n=2, m=8;
    int arr[n][m], linesum=0, sum=0, a, b;
    std::cout << "input range: "; // пользователем вводится диапазон 
    std::cin >> a >> b;
    if (a>b) //в случе если первая цифра больше второй
        std::swap(a,b);//меняем их местами
    std::cout << "array" << std::endl;
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            arr[i][j] = rand()%(b-a+1)+a;//заполняем массив числами из диапазона пользователя
            std::cout << arr[i][j] << '\t';//выводим на экран массив
        }
        std::cout << std::endl;
    }
    int c=0;
    while(c<m) // задаем в цикле наибольшую сумму строки массива (по умолчанию)
    {
        linesum+=arr[0][c];
        c++;
    }
    for (int i=0; i<n; i++)
    {
        sum=0; //обнуляем сумму
        for (int j=0; j<m; j++)
        {
            sum += arr[i][j]; //считаем сумму строки
        }
        if(sum>linesum) //сравниваем полученную сумму с суммой по умолчанию
            linesum=sum; //если сумма текущей строки больше - делаем ее суммой по умолчанию
    }
    std::cout << linesum << std::endl; //наибольшую сумму
    system ("pause");
}
так чтоль?
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
30.01.2017, 22:37 3
извините, не увидел ответ!!!

Добавлено через 50 минут
тут я получаю огогоооо число, а мне надо узнать какая строка...

Добавлено через 12 минут
тут что можно применить на 26-й строке?
тоесть прировнять max=?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cstdlib>
using namespace std;
void main()
{
    srand((unsigned)time(NULL));
    const int N = 4;
    const int M = 2;
    int x, y;
    int A[N][M], sum, max, num;
    cout << "Введите диапазон [x, y]:" << endl;
    cout << "x = ";
    cin >> x;
    cout << "y = ";
    cin >> y;
    cout << "Случайная матрица A[4][2]:" << endl;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            A[i][j] = rand() % (y - x + 1) + x;
            cout << A[i][j] << " ";
        }
        cout << endl;
    }
    max = INT_MIN;
    for (int i = 0; i < N; i++)
    {
        sum = 0;
        for (int j = 0; j < M; j++)
        {
            sum += A[i][j];
        }
        if (sum > max)
        {
            max = sum;
            num = i;
        }
    }
    cout << "Строка с наибольшей суммой элементов: " << ++num << endl;
    system("pause");
    return 0;
}
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
30.01.2017, 23:35 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <cstdlib>
#include <time.h>
int main ()
{
    srand(time(NULL));
    const int n=2, m=8;
    int arr[n][m], linesum=0, sum=0, a, b, pos=1;
    std::cout << "input range: "; // пользователем вводится диапазон 
    std::cin >> a >> b;
    if (a>b) //в случе если первая цифра больше второй
        std::swap(a,b);//меняем их местами
    std::cout << "array" << std::endl;
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            arr[i][j] = rand()%(b-a+1)+a;//заполняем массив числами из диапазона пользователя
            std::cout << arr[i][j] << '\t';//выводим на экран массив
        }
        std::cout << std::endl;
    }
    int c=0;
    while(c<m) // задаем в цикле наибольшую сумму строки массива (по умолчанию)
    {
        linesum+=arr[0][c];
        c++;
    }
    for (int i=0; i<n; i++)
    {
        sum=0; //обнуляем сумму
        for (int j=0; j<m; j++)
        {
            sum += arr[i][j]; //считаем сумму строки
        }
        if(sum>linesum) //сравниваем полученную сумму с суммой по умолчанию
        {
            linesum=sum; //если сумма текущей строки больше - делаем ее суммой по умолчанию
            pos = (i+1);
        }
    }
    std::cout << "max sum ( " << linesum << " ) in line " << pos <<  std::endl; //наибольшую сумму
    system ("pause");
}
вот с выводом нужной строки..
Цитата Сообщение от Sports Посмотреть сообщение
огогоооо число
это выводится сама сумма строки
а для чего вам 26 строка? что бы компилятор не ругался вам следует подключить тогда еще одну билиотеку limits. радует что вы хотя бы над кодом еще постарались разобраться)) и переделать его под свой манер
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
30.01.2017, 23:42 5
Цитата Сообщение от FreeYourMind Посмотреть сообщение
C++
1
std::swap(a,b);//меняем их местами
это вместо if (a<b)?
C++
1
 std::swap(a,b);//меняем их местами
просто с этой библиотекой и такой тактикой отработки я не знаком еще и из-за этого спрашиваю Вас
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
30.01.2017, 23:44 6
интересно а у вас в вашем коде сколько ошибок выскакивает? с учетом отсутствия 2 библиотек и оператора return в конце главной функции при том что тип этой функции void
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
30.01.2017, 23:48 7
На удивление, нет ошибок! Когда есть ошибки, компилятор не открывается!
Меня учат пока что на void main() и return 0 я просто убираю)))
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
30.01.2017, 23:51 8
Цитата Сообщение от Sports Посмотреть сообщение
C++
1
std::swap(a,b);
это функция которая есть в namespace std для нее не требуется какие то новые библиотеки.. она нужна для того что бы 2 переменным поменять значение не используя третью.. это как
C++
1
2
3
4
int a = 5, b = 10, temp;
temp = a;
a = b;
b = temp;
и на выходе у вас а = 10 а Б = 5.. и вот просто что бы не писать это можно использовать функцию swap(a,b)
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
30.01.2017, 23:51 9
Цитата Сообщение от FreeYourMind Посмотреть сообщение
C++
1
2
if (a>b) //в случе если первая цифра больше второй
    std::swap(a,b);//меняем их местами
Вы сделали без фигурных скобок, разве они не должны быть там?
И если должны, что тогда в них писать в данной ситуации, только вывод на экран?
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
30.01.2017, 23:54 10
Цитата Сообщение от Sports Посмотреть сообщение
C++
1
void main()
в таком случае у вас наверное компилятор другой.. ну и + вы не убрали в вашем коде return.. да и еще дело в том, что void main() может не компилироваться на других компьютерах.. а так в целом код который вы предоставили вполне рабочий
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
30.01.2017, 23:55 11
Цитата Сообщение от Sports Посмотреть сообщение
C++
1
2
if (a>b) //в случае если первая цифра больше второй
    std::swap(a,b);//меняем их местами
то есть в этом случае чтобы не писать if (a<b)?....если я правильно Вас понял
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
30.01.2017, 23:57 12
Цитата Сообщение от Sports Посмотреть сообщение
без фигурных скобок
в случае если в теле цикла стоит только 1 оператор то не обязательно прописывать фигурные скобки.. почему я сделал именно так, потому что привык когда диапазон идет от меньшего к большему..
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
30.01.2017, 23:59 13
это другой код и на return 0 не обратил внимание (не запуская его скопировал) отправляя его все подчеркивало конечно красным!!
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
31.01.2017, 00:00 14
Цитата Сообщение от Sports Посмотреть сообщение
чтобы не писать if (a<b)
именно.. что бы не делать еще одну ветку проще их поменять местами в случае если пользователь ввел сперва большую цифру а затем меньшую
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
31.01.2017, 00:02 15
Понял Вас, спасибо большое!!!
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
31.01.2017, 00:04 16
пример работы вашего кода (если х введено больше чем у)
Миниатюры
Найти в матрице строку, сумма элементов которой наибольшая  
1
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
31.01.2017, 00:09 17
да не за что ))

Добавлено через 4 минуты
а если вы в код пропишете
C++
1
2
if (x>y)
        swap(x,y);
или же
C++
1
2
3
4
5
6
if (x>y)
    {
        int tmp = x;
        x=y;
        y=tmp;
    }
(что в принцип одно и то же) то ваша программа будет заполнять массив числами из заданного диапазона
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
31.01.2017, 01:15 18
Это как раз хотел спросить Вас))))
Но если так
C++
1
2
3
4
5
6
if (x>y)
    {
        int tmp = x;
        x=y;
        y=tmp;
    }
что если на оборот, то есть
C++
1
if (x<y)
, что тогда я прописываю в фигурных скобках???
Извините, что много вопросов, всего лишь 2-й месяц учусь и естественно такие секреты не рассказываюут(((

Добавлено через 32 минуты
Вот как сделал с вашей помощью!!!
НО вопрос, почему позиция начинается с единицы( position = 1)+position = (i + 1) зачем?
И зачем обнулять сумму, если при объявлении переменной сумма обнуляеться(sum = 0; //обнуляем сумму)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include<iostream>
#include<time.h>
using namespace std;
void main()
{
    setlocale(LC_ALL, "ru");
    srand(time(NULL));
 
 
    const int line = 4, column = 6;
    int start, end;
    int array[line][column], temporary_sum = 0, sum = 0, position = 1;
    cout << " Введите начало диапазона : "; 
    cin >> start;
    cout << " Введите конец диапазона : ";
    cin >> end;
    if (start > end)
    {
        int temporary = start;
        start = end;
        end = temporary;
    } 
    if (end > start)
    {
        cout << " Конец диапазона больше начала!!! ";
    }
    for (int i = 0; i < line; i++)
    {
        for (int j = 0; j < column; j++)
        {
            array[i][j] = rand() % (end - start + 1) + start;
            cout <<" array ["<<i<<"]["<<j<<"] = "<< array[i][j] << '\t';
        }
    }
    cout << "\n";
    int temporary1 = 0;
    while (temporary1 < column) // задаем в цикле наибольшую сумму строки массива (по умолчанию)
    {
        temporary_sum += array[0][temporary1];
        temporary1++;
    }
    for (int i = 0; i < line; i++)
    {
        sum = 0; //обнуляем сумму
        for (int j = 0; j < column; j++)
        {
            sum += array[i][j]; 
        }
        if (sum > temporary_sum) //сравниваем полученную сумму с суммой по умолчанию
        {
            temporary_sum = sum; //если сумма текущей строки больше - делаем ее суммой по умолчанию
            position = (i + 1);
        }
    }
    cout << " Максимальная сумма = [" << temporary_sum << "] на позиции = [" << position << "] \n"; //наибольшую сумму
 
}
0
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
31.01.2017, 01:19 19
Цитата Сообщение от Sports Посмотреть сообщение
если на оборот
а если наоборот, т.е. диапазон записан верно.. т.е. вам этого "наоборот" не надо.. поймите, у вас может быть 3 варианта.. либо первое больше второго, либо второе больше первого, либо оба равны.. вариант №3 отбрасывается сразу ибо в таком случае весь ваш массив заполнится только одним значением.. остается 2 других.. первый (он же логически неверный) - первое число больше второго (это вы понимаете что разницы по сути нету например от 7 до 1 или же от 1 до 7.. значения одни и те же..) а компьютер - тупой.. он не думает.. он выполняет вами прописанные действия.. в итоге логика нарушается.. по этому что бы он использовал данню ему команду (логически) верно.. ее следует привести к второму варианту.. этот момент мы и прописываем в
C++
1
2
3
4
5
6
if (x>y)
    {
        int tmp = x;
        x=y;
        y=tmp;
    }
в другом случае (когда входные данные (логически) верны) т.е. второе больше первого нам ничего не надо подгонять и программа может работать корректно.. как то так
1
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 55
31.01.2017, 01:27 20
Да, сейчас по пробовал
Начинает тупить!
0
31.01.2017, 01:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2017, 01:27
Помогаю со студенческими работами здесь

Вывести на экран строку матрицы, сумма значений элементов которой наибольшая
Напишите программу в паскале,которая выводит на экран строку матрицы,сумма значений элементов...

Найти номер той строки в массиве сумма элементов которой наибольшая
Помогите решить пожалуйста. Дан массив X(N,M). Найти номер той строки в массиве сумма элементов...

В матрице после каждой строки, сумма элементов которой больше 10, вставить новую строку
В двумерном массиве после каждой строки, сумма элементов которой больше 10, вставить новую строку,...

Поиск столбца, сумма элементов которого наибольшая в матрице
Немоглибы бы вы мне помочь,задание состояло в поиске столбца сумма элементов которого наибольшая в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru