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

Найти такую последовательность элементов, чтобы их сумма была чётная и минимальная

05.06.2019, 01:20. Показов 425. Ответов 0

Задан массив целых чисел размерностью x×y×z. В нулевой матрице элементы выбираются произвольно. В первой – элемент выбирается из строки, номер которой равен номеру столбца предыдущего выбранного элемента. Во второй – элемент выбирается из столбца, номер которого равен номеру строки предыдущего выбранного элемента. И так далее…

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

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

Кликните здесь для просмотра всего текста

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using System;
using System.Linq;
using System.IO;
 
namespace SavinApp1
{
    class Program
    {
        static void ReadArray(out int x, out int y, out int z, out int[,,] arr)
        {
            StreamReader input = new StreamReader("input.txt");
            x = 0; y = 0; z = 1;
            while (!input.EndOfStream)
            {
                string String = input.ReadLine();
                string[] Elements = String.Split();
                if (String != string.Empty)
                {
                    x = Elements.Length;
                    ++y;
                }
                else
                {
                    ++z;
                    y = 0;
                }
            }
            input.Close();
            input = new StreamReader("input.txt");
            arr = new int[z, y, x];
            for (int k = 0; k < z; ++k)
            {
                for (int j = 0; j < y; ++j)
                {
                    string[] String = input.ReadLine().Split();
                    for (int i = 0; i < x; ++i)
                    {
                        arr[k, j, i] = Convert.ToInt32(String[i]);
                    }
                }
                input.ReadLine();
            }
        }
        static void PrintArray(int x, int y, int z, int[,,] arr)
        {
            for (int k = 0; k < z; ++k)
            {
                for (int j = 0; j < y; ++j)
                {
                    for (int i = 0; i < x; ++i)
                    {
                        Console.Write($"{arr[k, j, i]} ");
                    }
                    Console.WriteLine();
                }
                Console.WriteLine();
            }
        }
        static void Main(string[] args)
        {
            ReadArray(out int x, out int y, out int z, out int[,,] arr);
            PrintArray(x, y, z, arr);
            int sum = 0, minsum = int.MaxValue;
            int column = -1, row = -1;
            int[] Selection = new int[z];
            int[] MinSelection = new int[z];
            for (int k = 0; k < z; ++k)
            {
                for (int j = 0; j < y; ++j)
                {
                    for (int i = 0; i < x; ++i)
                    {
                        if (k == 0)
                        {
                            Selection[k] = arr[k, j, i];
                            column = i;
                            sum = Selection.Sum();
                            if ((sum < minsum) && (sum % 2 == 0))
                            {
                                minsum = sum;
                                MinSelection[k] = Selection[k];
                            }
                        }
                        else if (k % 2 == 1)
                        {
                            for (int i1 = 0; i1 < x; ++i1)
                            {
                                Selection[k] = arr[k, column, i1];
                                row = column;
                                sum = Selection.Sum();
                                if ((sum < minsum) && (sum % 2 == 0))
                                {
                                    minsum = sum;
                                    MinSelection[k] = Selection[k];
                                }
                            }
                        }
                        else if (k % 2 == 0)
                        {
                            for (int j1 = 0; j1 < y; ++j1)
                            {
                                Selection[k] = arr[k, j1, row];
                                column = row;
                                sum = Selection.Sum();
                                if ((sum < minsum) && (sum % 2 == 0))
                                {
                                    minsum = sum;
                                    MinSelection[k] = Selection[k];
                                }
                            }
                        }
                    }
                }
            }
            for (int k = 0; k < z - 1; ++k)
            {
                Console.Write($"{MinSelection[k]} + ");
            }
            Console.WriteLine($"{MinSelection[z - 1]} = {minsum}");
        }
    }
}


Даю на вход следующие матрицы:

4 2
1 11

5 3
1 2

7 3
9 6

Программа выбирает только элемент "2" из нулевой матрицы
Дальше не хочет...
Скорее всего, я что-то напутал с индексацией

Добавлено через 8 минут
Есть код аналогичной программы для массива 3×3×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
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
using System;
using System.IO;
 
namespace Rasput_koApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int glubina = 3, vysota = 3, dlina = 3;
            int[,,] a = new int[glubina, vysota, dlina];
            StreamReader R = new StreamReader("int.txt");
            string p = R.ReadToEnd();
            int q = 0;
            string[] b = p.Split(' ', '\n');
            for (int i = 0; i < glubina; i++)
            {
                for (int stroka = 0; stroka < vysota; stroka++)
                {
                    for (int stolbets = 0; stolbets < dlina; stolbets++)
                    {
                        a[i, stroka, stolbets] = int.Parse(b[q++]);
                    }
                }
            }
            R.Close();
            int maxsum = int.MinValue, element_matrix_0, element_matrix_1, element_matrix_2;
            int y = 0, o = 0, r = 0, e = 0;
            for (int i = 0; i < vysota; i++)
            {
                for (int j = 0; j < dlina; j++)
                {
                    element_matrix_0 = a[0, i, j];
                    for (int k = 0; k < vysota; k++)
                    {
                        element_matrix_1 = a[1, k, i];
                        for (int u = 0; u < vysota; u++)
                        {
                            element_matrix_2 = a[2, u, k];
                            if (element_matrix_0 + element_matrix_1 + element_matrix_2 > maxsum)
                            {
                                maxsum = element_matrix_1 + element_matrix_0 + element_matrix_2;
                                y = i; o = j; r = k; e = u;
                            }
                        }
                    }
                }
            }
            Console.WriteLine($"Координаты чисел: a[0, {y},{o}], a[1, {r},{y}], a[2,{e},{r}]");
            Console.WriteLine($"Числа: { a[0, y, o]}, {a[1, r, y]}, {a[2, e, r]}");
            Console.WriteLine($"Сумма: {maxsum}");
        }
    }
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2019, 01:20
Ответы с готовыми решениями:

Найти такой набор целых положительных чисел, чтобы их сумма была равна N
Доброго времени, форумчане! Весь вечер ломаю голову, на ум ничего не приходит. Задание. Написать...

В матрице найти такой путь от первой колонки к последней, чтобы сумма чисел пройденных по пути была минимальная
Ребят, нужен алгоритм. Формируется двумерная таблица из случайных цифр 1-9. Нужно найти такой путь...

Найти последовательность из трех чисел, чтобы их сумма была равна 10
Нужна помощь!!! Задание такое: Из текстового файла считать матрицу любой размерности. НАДО (ПО...

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2019, 01:20

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

Найти сумму наибольших элементов матрицы, чтобы сумма была наибольшей
Дано масив 11 на 11 41 67 34 0 69 24 78 58 62 64 5 45 81 27 61 91 95 42 27 36 91 4 2 53...

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

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


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

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

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