0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 135
1

В каждой строке матрицы максимум среди нечетных элементов умножить на номер строки в которой он встречается

19.11.2016, 14:11. Показов 1406. Ответов 8
Метки нет (Все метки)

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


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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _54
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("N=");
            int n = int.Parse(Console.ReadLine());
 
            Console.Write("M=");
            int m = int.Parse(Console.ReadLine());
 
            int[,] mass = new int[n, m];
            int i, j, max, j_max;
            Random rand = new Random();
            Console.WriteLine("Массив:");
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < m; j++)
                {
                    mass[i, j] = rand.Next(-10, 30);
                    Console.Write(mass[i, j] + "\t");
                }
                Console.WriteLine("\n");
            }
 
            for (i = 0; i < n; i++)
            {
                max = mass[i, 0];
                j_max = 0;
                for (j = 0; j < m; j++)
                {
                    if (mass[i, j_max] % 2 != 0)
                    {
                        max = mass[i, j];
                        j_max = j;
                    }
                }
                mass[i, j_max] *= i;
            }
            Console.WriteLine("После преобразования:\n");
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < m; j++)
                {
                    Console.Write(mass[i, j] + "\t");
                }
                Console.WriteLine("\n");
                Console.ReadKey();
            }
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2016, 14:11
Ответы с готовыми решениями:

Посчитать сумму элементов отдельно в каждой строке матрицы и определить номер строки, в которой эта сумма максимальна
Заполнить двумерный массив случайными числами от 10 до 100. Посчитать сумму элементов отдельно в...

Найти максимум среди минимальных элементов каждой строки матрицы
Задано прямоугольную целочисленную матрицу размером m * n. Найти максимум среди минимальных...

Определить для каждой строки матрицы произведение элементов, и среди них найти максимум
Дан двумерный массив из 5 строк и 6 столбцов. Определить для каждой строки массива произведение...

Для каждой строки матрицы, номер которой кратен 4, найти среднее арифметическое элементов
Дана матрица размера M×N. Для каждой строки матрицы номер которой кратен 4 найти среднее...

8
9 / 9 / 11
Регистрация: 01.12.2014
Сообщений: 31
19.11.2016, 16:48 2
Уберите Console.ReadKey() з цикла - 55 строка
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 135
20.11.2016, 14:31  [ТС] 3
Зачем? Это для того, чтобы программа не закрывалась сама.
0
9 / 9 / 11
Регистрация: 01.12.2014
Сообщений: 31
20.11.2016, 14:38 4
Да, но она в цикле и поэтому, чтобы отобразить все строки, нужно после каждой отображенной строки нажимать клавишу.

Сделайте так и все будет работать :

C#
1
2
3
4
5
6
7
8
9
            for (i = 0; i < n; i++)
            {
                for (j = 0; j < m; j++)
                {
                    Console.Write(mass[i, j] + "\t");
                }
                Console.WriteLine("\n");
            }
             Console.ReadKey();
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 135
20.11.2016, 16:24  [ТС] 5
Теперь он выводит тот же самый массив, что и до преобразования. Что-то с условием, почему он его игнорирует?(

Добавлено через 34 минуты
Написал заново код, сделал ввод для пользователя. Работает условие, но как мне правильно сделать, чтобы производилось действие с максимум среди нечетных элементов в каждой строке? Пока, что лишь программа исследует элемент на нечетность и умножает на j.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _54
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("N=");
            int n = int.Parse(Console.ReadLine());
 
            Console.Write("M=");
            int m = int.Parse(Console.ReadLine());
 
            int[,] a = new int[n, m];
 
            Console.WriteLine("Введите элементы массива:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    Console.Write("a[{0}][{1}]=", i, j);
                    a[i, j] = int.Parse(Console.ReadLine());
                }
            }
 
            Console.WriteLine("\n Массив до преобразований:");
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine();
                for (int j = 0; j < m; j++)
                {
                    Console.Write("\t " + a[i, j]);
                }
            }
 
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (a[i, j] % 2 != 0)
                    {
                        a[i, j] *= j;
                    }
 
                }
            }
 
            Console.WriteLine("\n Массив после преобразований:");
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine();
                for (int j = 0; j < m; j++)
                {
                    Console.Write("\t " + a[i, j]);
                }
            }
            Console.ReadKey();
        }
    }
}
0
9 / 9 / 11
Регистрация: 01.12.2014
Сообщений: 31
20.11.2016, 16:56 6
У вас неверное условие - там идет проверка mass[i, j_max] на начетность, при том, что j_max всегда == 0
Попробуйте это :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (i = 0; i < n; i++)
{
    j_max = -1;
    for (j = 0; j < m; j++)
    {
        if (Math.Abs(mass[i, j]) % 2 != 0)   //если число по модулю нечетное
        {
            if (j_max == -1 || mass[i, j] > mass[i, j_max])  //если это первое нечетное число или если оно больше других предыдущих
            {
                  j_max = j;  // сохраняем индекс этого числа
            }
         }
     }
     if (j_max != -1) // проверка, есть ли в строке нечетные числа
     {
            mass[i, j_max] *= i;
     }
}
Добавлено через 10 минут
Не увидел, что сообщение отредактировано.. Просто замените строки 41-51 на код выше, ну и переименуйте массив соответственно - должно работать
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 135
20.11.2016, 17:03  [ТС] 7
Программа находит максимум среди всех элементов. А нужно в каждой строчке(
0
9 / 9 / 11
Регистрация: 01.12.2014
Сообщений: 31
20.11.2016, 17:15 8
Лучший ответ Сообщение было отмечено clon7771 как решение

Решение

Используйте этот код, здесь в консоль идет вывод максимального елемента среди нечетных чисел, для каждой строки.

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
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _54
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("N=");
            int n = int.Parse(Console.ReadLine());
 
            Console.Write("M=");
            int m = int.Parse(Console.ReadLine());
 
            int[,] a = new int[n, m];
 
            Console.WriteLine("Введите элементы массива:");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    Console.Write("a[{0}][{1}]=", i, j);
                    a[i, j] = int.Parse(Console.ReadLine());
                }
            }
 
            Console.WriteLine("\n Массив до преобразований:");
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine();
                for (int j = 0; j < m; j++)
                {
                    Console.Write("\t " + a[i, j]);
                }
            }
 
            Console.WriteLine('\n');
 
            for (int i = 0; i < n; i++)
            {
                int j_max = -1;
                for (int j = 0; j < m; j++)
                {
                    if (Math.Abs(a[i, j]) % 2 != 0)   //если число по модулю нечетное
                    {
                        if (j_max == -1 || a[i, j] > a[i, j_max])  //если это первое нечетное число или если оно больше других предыдущих
                        {
                            j_max = j;  // сохраняем индекс этого числа
                        }
                    }
                }
                if (j_max != -1) // проверка, есть ли в строке нечетные числа
                {
                    Console.WriteLine("Максимум {0} строки - {1}", i, a[i, j_max]);
                    a[i, j_max] *= i;
                }
                else
                {
                    Console.WriteLine("Нечетные числа отсутствуют");
                }
            }
 
            Console.WriteLine("\n Массив после преобразований:");
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine();
                for (int j = 0; j < m; j++)
                {
                    Console.Write("\t " + a[i, j]);
                }
            }
            Console.ReadKey();
        }
    }
}
1
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 135
21.11.2016, 14:53  [ТС] 9
Огромное спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2016, 14:53
Помогаю со студенческими работами здесь

Отпечатать номер каждой строки матрицы, в которой не менее 2 элементов имеют нулевое значение
Составить алгоритм и программу для решения задачи. И собственно задача. Для матрицы из 3...

В каждой строке матрицы найти максимум и его номер, затем номер элемента, который меньше (макс/2) и узнать его номер
Не можете подсказать, как все сделать в цикле Имеется матрицы, нужно в каждой строке найти...

Для матрицы определить номер каждой строки, в которой не менее 2 элементов имеют нулевые значения
Для матрицы из 3 столбцов и 6 строк определить номер каждой строки, в которой не менее 2 элементов...

Упорядочить строки матрицы по возрастанию количества отрицательных нечетных элементов в каждой строке
Упорядочить строки целочисленной прямоугольной матрицы по возраста-нию количества отрицательных...

Среди элементов каждой строки матрицы, отличных от данного B, найти наибольший элемент и его номер
Задана матрица размерности M*N. Среди элементов каждой строки, отличных от данного B, найти...

Разработать функцию, которая находит сумму в каждой строке матрицы, а среди сумм - максимум
Разработать функцию, которая для произвольной матрицы находит сумму в каждом рядке матрицы а среди...


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

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

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