Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Nick96
6 / 6 / 2
Регистрация: 24.04.2014
Сообщений: 107
#1

В матрице найти сумму повторяющихся элементов главной диагонали

25.04.2014, 16:12. Просмотров 714. Ответов 18
Метки нет (Все метки)

Не могу понять как решить задачу!
В матрице А [5,5] найти сумму повторяющихся элементов главной диагонали; если она (полученная сумма) делится на три, то заполнить главную диагональ нулями.

Добавлено через 5 часов 50 минут
Неужели никто не может решить?

Добавлено через 9 минут
Помогите малоопытному программисту в этом нелёгком деле!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2014, 16:12
Ответы с готовыми решениями:

В квадратной матрице найти сумму элементов ниже главной диагонали
В квадратной матрице найти сумму элементов ниже главной диагонали Надо...

В матрице размером n х n найти сумму элементов, лежащих ниже главной диагонали, и произведение элементов, леж
В матрице размером n х n найти сумму элементов, лежащих ниже главной диагонали,...

В квадратной матрице найти сумму минимального и максимального элементов главной диагонали
В квадратной матрице найти сумму минимального и максимального элементов главной...

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

В заданной квадратной матрице заменить минимальный элемент на 0, затем найти сумму элементов главной диагонали
В матрице размерности 7 на 7 посчитать в каждом втором столбце заме-...

18
Ullaluna
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
25.04.2014, 16:51 #2
Общий алгоритм примерно такой:

- матрица 5х5 - это двухмерный массив вида arr[i][j];
- в двойном цикле сравнивая i и j, находите элементы главной диагонали - это те элементы массива, у которых i = j;
- с каждый найденным элементом увеличиваем значение переменной полученная_сумма на значение этого элемента;
- наконец, делите на три;
- если делится, то все элементы массива, отвечающие условию i = j приравниваются к нулю:
arr[i][j] = 0;

Если у вас будут вопросы по написанному вами коду, то вам наверняка помогут. Писать код за вас, честно говоря, неправильно. Ведь это источник финансов для подрабатывающих отличников, некрасиво им мешать
0
Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
25.04.2014, 16:53 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int x[5][5];
int tmp;
bool f;
// Вводим матрицу
...
// Ищем сумму элементов
for(int i = 0; i<5; i++)
{
tmp = x[i][i]
for(int j = i+1; j < 5; j++)
{
if(x[i][i] == x[j][j]) tmp = tmp + x[i][i];
}
if(tmp!=x[i][i] && tmp % 3 == 0) f = 1; 
}
 
if(f)
{
for(int i = 0; i<5; i++)
{
x[i][i] = 0;
}
}
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,170
Записей в блоге: 1
25.04.2014, 17:02 #4
Цитата Сообщение от Ullaluna Посмотреть сообщение
- в двойном цикле сравнивая i и j, находите элементы главной диагонали - это те элементы массива, у которых i = j;
А-ха-ха
А зачем же тебе понадобился для этой задачи двойной цикл??? Одинарного тебе не достаточно??!
Цитата Сообщение от Ullaluna Посмотреть сообщение
отвечающие условию i = j
может всё-таки условие должно быть i == j, нет?
Впрочем, как я уже сказал выше, двойного цикла тут вообще не нужно!

Добавлено через 1 минуту
Цитата Сообщение от Vaiz Посмотреть сообщение
if(x[i][i] == x[j][j]) tmp = tmp + x[i][i];
неверно!

Добавлено через 4 минуты
Цитата Сообщение от Nick96 Посмотреть сообщение
В матрице А [5,5] найти сумму повторяющихся элементов главной диагонали; если она (полученная сумма) делится на три, то заполнить главную диагональ нулями.
C++
1
2
3
4
5
6
7
8
9
10
int A[5][5];
for (int i=0; i<5; i++)
for (int j=0; j<5; j++)
A[i][j]=rand()%4;
int sum=0;
for (int i=0; i<5; i++)
  sum+=A[i][i];
if (sum%3==0)
  for (int i=0; i<5; i++)
    A[i][i]=0;
0
Ullaluna
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
25.04.2014, 17:06 #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Одинарного тебе не достаточно??!
Нет, мне все мало.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
может всё-таки условие должно быть i == j, нет?
Нет, i = j. Это условие из текста, написанного на русском языке, а не на с++. Ты этого не сообразил, ты мыслишь кодом? Купи себе хотя бы резиновую женщину\вибратор, ботаник.
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,170
Записей в блоге: 1
25.04.2014, 17:45 #6
Лучший ответ Сообщение было отмечено Nick96 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const int n=5;
int A[n][n];
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
A[i][j]=rand()%4;
int sum=0;
for (int i=0; i<n; i++){
  bool unique=true;
  for (int j=0; j<n && unique; j++)
    if (i!=j) unique=(a[i]!=a[j]);
  if (unique) sum+=A[i][i];
}
if (sum%3==0)
  for (int i=0; i<n; i++)
    A[i][i]=0;
1
Nick96
6 / 6 / 2
Регистрация: 24.04.2014
Сообщений: 107
25.04.2014, 21:06  [ТС] #7
Я недавно начал программировать. Можно целый код?

Добавлено через 3 минуты
Какие-то обрывки - мне вообще не понятно, что? куда? please

Добавлено через 58 минут
Коды не работают!!!

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "RUS");
    int i, j, N, a[20][20];
    cout << "Введите число строк и столбцов: ";
    cin >> N;
    cout << "Input matrix A\n";
    for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
        cin >> a[i][j];
    cout << "matrix A\n";
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            cout << a[i][j] << "\t";
        cout << endl;
    }
    system("pause");
    return 0;
}
Добавлено через 24 секунды
Это код матрицы. А дальше что?
0
Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
25.04.2014, 22:49 #8
Лучший ответ Сообщение было отмечено Nick96 как решение

Решение

Вставьте этот код, от Kuzia domovenok перед system("pause");
После него можете выводить матрицу
C++
1
2
3
4
5
6
7
8
9
10
int sum=0;
for (int i=0; i<n; i++){
  bool unique=true;
  for (int j=0; j<n && unique; j++)
    if (i!=j) unique=(A[i]!=A[j]);
  if (unique) sum+=A[i][i];
}
if (sum%3==0)
  for (int i=0; i<n; i++)
    A[i][i]=0;
1
Nick96
6 / 6 / 2
Регистрация: 24.04.2014
Сообщений: 107
27.04.2014, 17:41  [ТС] #9
Видимо в коде есть ошибка, поскольку он считает и другие повторяющиеся элементы ( А НАДО ТОЛЬКО ГЛАВНОЙ ДИАГОНАЛИ). Например, в этой матрице
611
111
116
с++ пишет, что сумма = 13 ( а не 12).
ОЧЕНЬ ПРОШУ ПОМОГИТЕ ИСПРАВИТЬ ОШИБКУ!!!

Добавлено через 2 минуты
То есть находится вся сумма элементов на главной диагонали, а надо, чтобы учитывалась сумма повторяющихся элементов на главной диагонали.

Добавлено через 1 минуту
Например, в той же матрице
611
111
116
Сумма должна быть = 12

Добавлено через 39 секунд
Сам код
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
int i, j, N, a[20][20];
cout << "Введите число строк и столбцов: ";
cin >> N;// ввод количества строк и столбцов
cout << "Введите матрицу\n";
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
cin >> a[i][j];
cout << "Матрица \n";// вывод матрицы
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
cout << a[i][j] << "\t";
cout << endl;
}
int sum = 0;
for (int i = 0; i<N; i++)
{
bool unique = true;
for (int j = 0; j<N && unique; j++)
if (i != j) unique = (a[i] != a[j]);
if (unique) sum += a[i][i];
}
if (sum % 3 == 0)
for (int i = 0; i<N; i++)
a[i][i] = 0;
cout << "Сумма повторяющихся элементов главной диагонали = " << sum << "\n";
if (sum % 3 != 0)
{
cout << "Сумма повторяющихся элементов главной диагонали не делится на 3 \n";
system("pause");
return 0;
}
cout << " Матрица приобретает вид\n";
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
cout << a[i][j] << "\t";
cout << endl;
}
system("pause");
return 0;
}
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,170
Записей в блоге: 1
27.04.2014, 18:53 #10
Цитата Сообщение от Vaiz Посмотреть сообщение
if (i!=j) unique=(A[i]!=A[j]);
вот эта строчка вообще полный бред, блин! У тебя двумерный массив с элементами на диагонали! Значит надо обращаться к ним как
C++
1
 if (i!=j) unique=(A[i][i]!=A[j][j]);
Добавлено через 1 минуту
а, ну да, это ж я так криво написал... ну дык всё равно смотреть надо, что пишут! и своей головой думать!
а-ха-ха!
0
Nick96
6 / 6 / 2
Регистрация: 24.04.2014
Сообщений: 107
27.04.2014, 18:57  [ТС] #11
Я поменял строчки - ещё хуже стало!
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,170
Записей в блоге: 1
27.04.2014, 19:05 #12
Nick96, какие строчки? ты ответ мой прочёл?
0
Nick96
6 / 6 / 2
Регистрация: 24.04.2014
Сообщений: 107
27.04.2014, 19:18  [ТС] #13
Заменил эту if (i!=j) unique=(A[i]!=A[j]);
на эту
if (i!=j) unique=(A[i][i]!=A[j][j]);

Добавлено через 9 минут
Может дело не в них?
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,170
Записей в блоге: 1
27.04.2014, 19:19 #14
и что конкретно стало хуже? Какие ошибки? ответ неверный или не компилируется? Что может быть хуже неверного ответа?!
0
Nick96
6 / 6 / 2
Регистрация: 24.04.2014
Сообщений: 107
27.04.2014, 19:25  [ТС] #15
Ответ вообще неправильный!
Может проблема в этой строке
if (unique) sum += a[i][i];
0
Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
27.04.2014, 21:28 #16
Вот полный код, работает в случае если только одно число повторяется.
Т.е. в матрице

1 0 0 0
0 1 0 0
0 0 3 0
0 0 0 3

сумма будет равна 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "RUS");
    int i, j, N, a[20][20];
    cout << "Введите число строк и столбцов: ";
    cin >> N;// ввод количества строк и столбцов
    cout << "Введите матрицу\n";
    for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
        cin >> a[i][j];
    cout << "Матрица \n";// вывод матрицы
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            cout << a[i][j] << "\t";
        cout << endl;
    }
 
    int sum = 0;
    for (i = 0; i<N; i++)
    {
        sum = a[i][i];
        for (j = i + 1; j < N; j++)
        {
            if (a[i][i] == a[j][j])
            {
                sum += a[i][i];
            }
        }
        if (sum != a[i][i]) break;
    }
 
    if (i == N) cout << "Повторяющихся элементов нет\n";
    else
    {
        cout << "Сумма повторяющихся элементов главной диагонали = " << sum << "\n";
        if (sum % 3 == 0)
        for (int i = 0; i < N; i++)
            a[i][i] = 0;
 
        if (sum % 3 != 0)
        {
            cout << "Сумма повторяющихся элементов главной диагонали не делится на 3 \n";
            system("pause");
            return 0;
        }
        cout << " Матрица приобретает вид\n";
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < N; j++)
                cout << a[i][j] << "\t";
            cout << endl;
        }
    }
    system("pause");
    return 0;
}
1
Nick96
6 / 6 / 2
Регистрация: 24.04.2014
Сообщений: 107
27.04.2014, 22:13  [ТС] #17
А как сделать так чтобы
1 0 0 0
0 1 0 0
0 0 3 0
0 0 0 3
сума = 8?
0
Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
27.04.2014, 22:31 #18
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
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "RUS");
    int i, j, N, a[20][20];
    cout << "Введите число строк и столбцов: ";
    cin >> N;// ввод количества строк и столбцов
    cout << "Введите матрицу\n";
    for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
        cin >> a[i][j];
    cout << "Матрица \n";// вывод матрицы
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            cout << a[i][j] << "\t";
        cout << endl;
    }
 
    int sum = 0, sum1 = 0;
    bool unique[20];
    for (i = 0; i < N; i++) unique[i] = 1;
    for (i = 0; i < N; i++)
    {
        sum1 = a[i][i];
        if (unique[i])
        {
            for (j = i + 1; j < N; j++)
            {
                if (a[i][i] == a[j][j])
                {
                    sum1 += a[i][i];
                    unique[j] = 0;
                }
            }
        }
        if (sum1 != a[i][i]) sum += sum1;
    }   
 
    if (sum == 0) cout << "Повторяющихся элементов нет\n";
    else
    {
        cout << "Сумма повторяющихся элементов главной диагонали = " << sum << "\n";
        if (sum % 3 == 0)
        for (int i = 0; i < N; i++)
            a[i][i] = 0;
 
        if (sum % 3 != 0)
        {
            cout << "Сумма повторяющихся элементов главной диагонали не делится на 3 \n";
            system("pause");
            return 0;
        }
        cout << " Матрица приобретает вид\n";
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < N; j++)
                cout << a[i][j] << "\t";
            cout << endl;
        }
    }
    system("pause");
    return 0;
}
1
Nick96
6 / 6 / 2
Регистрация: 24.04.2014
Сообщений: 107
27.04.2014, 22:37  [ТС] #19
ЧУВАК!!! ТЫ ПРОСТО СУПЕР!!! СПАСИБО ТЕБЕ!!!
0
27.04.2014, 22:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2014, 22:37

Дан двухмерный массив.Найти сумму элементов побочной диагонали и сумму элементов главной диагонали
Дан двухмерный массив.Найти сумму элементов побочной диагонали и сумму...

В матрице определить сумму элементов, находящихся на главной диагонали
1. В матрице размерами N*N (N не больше 10) определить сумму элементов,...

В матрице посчитать сумму четных элементов выше главной диагонали
Помогите пожалуйста!!! Задание такое: В матрице подсчитать сумму четных...


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

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

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