Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
#1

В квадратной матрице A[N][N] определить номер столбца... - C++

12.10.2010, 10:12. Просмотров 1867. Ответов 24
Метки нет (Все метки)

В квадратной матрице A[N][N] определить номер столбца матрицы, имеющего наибольшую сумму элементов. Поменять этот столбец со строкой, имеющей наименьшую сумму элементов.

Помогите, пожалуйста, решить данную задачу. Двумерный массив вводить через (нас так к сожалению учат...):
C++
1
2
3
4
5
6
7
8
9
const int N1=10;
             M1=10;
int a[N1][M1],i,j,n,m;
printf("input size: ");
scanf("%d%d",&n,&m);
printf("input elements: ");
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2010, 10:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В квадратной матрице A[N][N] определить номер столбца... (C++):

Определить номер столбца квадратной матрицы, сумма элементов которой максимальна - C++
Написать программу, которая определяет номер столбца квадратной матрицы, сумма элементов которой максимальна.

В квадратной матрице найти сумму модулей элементов в строках, содержащих хотя бы один отрицательный элемент; определить номер 1ой строки с 0-ым элем-о - C++
Дана целочисленная квадратная матрица. 1) Найти сумму модулей элементов в строках, содержащих хотя бы один отрицательный элемент. 2)...

В матрице целых чисел размером 3x7 определить номер столбца, который содержит наименьший элемент - C++
В матрице целых чисел размером 3x7 определить номер столбца, который содержит наименьший элемент.

В заданной квадратной матрице провести манипуляции со строкой, номер которой задан пользователем с клавиатуры - C++
пользователь указывает номер строки условие: 0&gt;1(*10) - где i введенное пользователем число else *5 вопрос как вводить строку. ...

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

Определить номер строки и номер столбца матрицы, на пересечении которых находятся требуемые элементы - C++
В двумерном массиве определить номер строки и номер столбца, на пересечении которых находятся требуемые элементы массива: 1) Последний...

24
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
12.10.2010, 12:15 #2
Ну и ? Вы не можете посчитать сумму элементов ? Или найти максимум в одномерном массиве ?
0
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 12:44  [ТС] #3
У меня получается только найти сумму элементов в каком-либо столбце, а вот как найти сумму во всех, сравнить и найти максимальную и номер этого столбца записать в переменную, и как потом менять строчки.. вот в чем проблема...
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.10.2010, 12:48 #4
Давайте ваши наработки. Будем разбираться.
0
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 12:53  [ТС] #5
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
int main()
{
    const int N1=10,
            M1=10;
    int a[N1][M1],i,j,n,m,s1,s2,max1,max2,i_,j_;
    
    s1=0;
    s2=0;
    max1=0;
    max2=0;
 
    printf("input size: ");
    scanf("%d%d",&n,&m);
    
    printf("input elements:\n");
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            scanf("%d",&a[i][j]);
    
    for(i=0; i<n; i++)
        max1+=a[i][0];
 
    printf("max1 = %d\t",max1);
 
    getch();
 
    return 0;
}
Пока получилось такое, просто находит сумму элементов в первом столбце..
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.10.2010, 12:57 #6
Ну а теперь чисто логически. Вы находите сумму элементов в столбце, двигаясь в цикле по строкам, при этом зафиксировав столбец. Проблема в том, что так вы найдёте сумму элементов только в одном, зафиксированном столбце. Как сделать так, чтобы столбец фиксировался на время, пока не посчитается сумма всех его элементов, а потом менялся на следующий (подсказка: аналогично заполняется матрица)?
0
Acid_C@t
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 5
12.10.2010, 13:07 #7
можна вообще изначальный массив не трогать
посчитать суммы по строчках и коллонках, сравнить, а дальше уже перезаписать в другой массив аналогичного размера с внесением изменений
0
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 13:08  [ТС] #8
Что-то даже ничего в голову не приходит...
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.10.2010, 13:20 #9
Acid_C@t,
А если у нас массив 1000000*1000000 элементов? Решая локальную задачу, всегда надо думать, что она может быть применима в глобальных случаях.

Добавлено через 10 минут
wertrix,
А хоть пытались в неё что-нибудь впустить?)))
Вы когда вводили матрицу с клавиатуры, вы, по сути, вводили её построчно. Т.е. во внешнем цикле фиксировали строку ровно на столько итераций вложенного, чтобы заполнить всю строку данными. Т.е. как работает ваш цикл ввода:
Фиксируете строку матрицы (i) (внешний цикл).
Пробегаете по элементам строки (по столбцам - j) (вложенный цикл).
Как только заполнили полностью строку - перешли на новую строку (увеличили i) и опять бежим по её элементам.

В данном случае надо сделать то же самое, только наоборот (во внешнем цикле зафиксировать столбец, во внутреннем бежать по его элементам и суммировать их. Как только закончится вложенный цикл - сумма всех элементов столбца готова - можно сравнивать её с предыдущей максимальной и минимальной суммой и в случае необходимости сохранять индекс столбца)
0
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 13:29  [ТС] #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    for(i=0; i<n; i++)
                max1+=a[i][0];
    
    for(j=0; j<n; j++)
    {
        for(i=0; i<n; i++)
            s1+=a[i][j];
            if(s1>max1)
            {
                max1=s1;
                j_=j;
            }
    }
 
    printf("stolbec max = %d\t",j_);
Пытался сделать так, как вы сказали, но программа выдает неверный ответ...
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.10.2010, 13:33 #11
Начнём с того, что у вас n и m разные, следовательно внешний цикл должен быть по m. Далее, вы после проверки условия s1 > max1 должны в любом случае обнулять s1, иначе сумма у вас будет считаться не по одному фиксированному столбцу, а по всем.
0
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 13:39  [ТС] #12
C++
1
2
3
4
5
6
7
8
9
10
11
for(j=0; j<m; j++)
    {
        for(i=0; i<n; i++)
            s1+=a[i][j];
            if(s1>max1)
            {
                max1=s1;
                j_=j;
                s1=0;
            }
    }
получилось это, но опять где-то ошибка и программа неверно считает
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.10.2010, 13:43 #13
Я же сказал - после условия и в любом случае обнулять. Вы хотя бы немного думайте. А то вот вы обнулили в случае, если s1 больше max. А если меньше или равно? Продолжаем увеличивать s1. Только вот это уже не сумма элементов столбца.
0
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 13:48  [ТС] #14
C++
1
2
3
4
5
6
7
8
9
10
11
    for(j=0; j<m; j++)
    {
        for(i=0; i<n; i++)
            s1+=a[i][j];
            if(s1>max1)
            {
                max1=s1;
                j_=j;
            }
            s1=0;
    }
Даже когда сумма обнуляется после условия, программа неверно считает.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.10.2010, 13:59 #15
А s1 хоть инициализировали перед циклом?
0
12.10.2010, 13:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2010, 13:59
Привет! Вот еще темы с ответами:

В целочисленной матрице найти номер столбца с минимальной суммой элементов - C++
С++.дана целочисленная матрица (m,n) Найти номер столбца с минимальной суммой элементов

Найти максимальное значение в матрице и номер его столбца и строки - C++
Дана матрица размером N*M. Напишите программу, определяющую максимальное значение в матрице и номер его столбца и строки.Ввод с...

В квадратной матрице определить наименьшие элементы каждого рядка - C++
Помогите решить программу. В квадратной матрице А определить наименьшие элементы каждого рядка и найти их суму. Заранее спасибо.

В квадратной матрице порядка 8 найти наименьшее из значений элементов столбца, который обладает наибольшей суммой модулей элементов - C++
Помогите, пожалуйста, решить задачу!) Дана целочисленная квадратная матрица порядка 8. Найти наименьшее из значений элементов столбца,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru