Форум программистов, компьютерный форум CyberForum.ru

Минимальный массив из кв. матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ расчёт значений переменных http://www.cyberforum.ru/cpp-beginners/thread722609.html
Здравствуйте!Возник вопрос касательно перерасчета переменных в цикле. Допустим, у нас есть код string mas; for(int i=0;i<mas.size();i++) Будет ли программа на каждой итерации цикла переасчитывать значение mas.size() или компилятор это оптимизирует это както.Или же всё же будет лучше записать так: string mas;
C++ Задание по С++(Вычеркнуть в данной строке каждую k-ю букву. ) Вычеркнуть в данной строке каждую k-ю букву. http://www.cyberforum.ru/cpp-beginners/thread722607.html
C++ Судоку
Помогите написать игру судоку. я программирую в С++. Мне дали задание написать игру судоку в консольке. Только без всяких наворотов, простое консольное приложение. Чтоб при запуске спрашивало размеры. Заранее благодарен.
Ошибка линковщика Unresolved External C++
Всем доброго времени! Проблема вот с этим: #include <iostream> #include <conio> using namespace std; #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused
C++ Найти все натуральные числа,не превосходящие заданного n,которые делятся на каждую из своих цифр. http://www.cyberforum.ru/cpp-beginners/thread722585.html
Найти все натуральные числа,не превосходящие заданного n,которые делятся на каждую из своих цифр.
C++ Вычислить сумму элементов главной диагонали(матрица) Дана матрица М (6х6). Вычислить сумму элементов главной диагонали(с использованием указателей). подробнее

Показать сообщение отдельно
fNt
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 1
07.12.2012, 14:20     Минимальный массив из кв. матрицы
Вот как это вышло у меня...пытаюсь вспомнить С++
Попытка номер один
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
using namespace std;
 
int main()
{
// объявляем переменные
    int x;
    cout<<"Введите размерность матрицы: ";
    cin>>x;
 
// на основе введеного числа формируем квадратную матрицу
    int array[x][x];
// и формируем одномерный массив, где будут минимальные элементы из каждой строки
    int min_array[x];
 
// заполняем матрицу случайными числами от 0 до 9
    srand(time(0));
 
    for (int i=0; i<x; i++)
        {
            for (int j=0; j<x; j++)
                {
                    array[i][j]=rand()%10;
                }
        }
 
// выводим исходную матрицу на экран
cout<<"\nИсходная матрица:\n";
    for (int i=0; i<x; i++)
        {
            for (int j=0; j<x; j++)
                {
                    cout<<array[i][j]<<" ";
                    if (j==x-1) cout<<"\n";
                }
        }
 
// просматримаем исходную матрицу
// и сортируем методом "пузырька"
// по возрастанию в строках
 
    for (int k=0; k<x; k++)
        {
            for (int i=x-1; i>0; i--)
                {
                    for (int j=0; j<i; j++)
                        {
                            if (array[k][j]>array[k][j+1])      //условие сортировки
                            {
                            int tmp=array[k][j];                //сортируем при помощи временной переменной
                            array[k][j]=array[k][j+1];
                            array[k][j+1]=tmp;
                            }
                        }
                }
        }
 
// теперь все нужные нам минимальные элементы
// стоят на 0-х местах в матрице
// перегоняим их в одномерный массив
    for (int i=0; i<x; i++)
        {
            min_array[i]=array[i][0];
        }
 
// выводим одномерный массив минимальных элементов
cout<<"\nОдномерный массив с минимальными элементами строк исходной матрицы:\n";
    for (int i=0; i<x; i++)
        {
            cout<<min_array[i]<<" ";
        }
 
 
    return 0;
}


Добавлено через 1 час 54 минуты
Вот исходник после отпимизации кода.
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{//объявляем переменные
    int x;
    cout<<"\nВведите размерность матрицы: ";
    cin>>x;
// на основе введеного числа формируем квадратную матрицу
    int array[x][x];
// и формируем одномерный массив, где будут минимальные элементы из каждой строки
    int min_array[x];
// заполняем матрицу случайными числами от 0 до 9
// и выводим исходную матрицу на экран
    srand(time(0));
    cout<<"\nИсходная матрица:\n";
    for (int i=0; i<x; i++)
        {for (int j=0; j<x; j++)
                {array[i][j]=rand()%10;
                 cout<<array[i][j]<<" ";
                 if (j==x-1) cout<<'\n';
                }
        }
// просматримаем исходную матрицу
// и сортируем методом "пузырька" по возрастанию в строках,
// т.к. после 1 прогона строки - 1-й элемент становится на своё место.
// Т.о. сразу записываем в одномерный массив и выводим тут же на экран
cout<<"\nОдномерный массив с минимальными элементами строк исходной матрицы:\n";
    for (int k=0; k<x; k++)
        {
            for (int i=x-1; i>0; i--)
                {
                    for (int j=0; j<i; j++)
                        {
                            if (array[k][j]>array[k][j+1])      //условие сортировки
                            {
                             int tmp=array[k][j];                //сортируем при помощи временной переменной
                             array[k][j]=array[k][j+1];
                             array[k][j+1]=tmp;
                            }
                        };
                    min_array[k]=array[k][0];
                };
            cout<<min_array[k]<<" ";
        }
    return 0;
}

Только вот никак не получается убрать еще один цикл, всю голову сломал...
Ведь после прогона всей строки - 1-й элемент становится на своё место,
До:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (int k=0; k<x; k++)
        {
            for (int i=x-1; i>0; i--)
                {
                    for (int j=0; j<i; j++)
                        {
                            if (array[k][j]>array[k][j+1])
                            {
                             int tmp=array[k][j];
                             array[k][j]=array[k][j+1];
                             array[k][j+1]=tmp;
                            }
                        };
                    min_array[k]=array[k][0];
                };
            cout<<min_array[k]<<" ";
        }

Убираем цикл по i - получаем
После:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int k=0; k<x; k++)
        {
          for (int j=0; j<x-1; j++)
                        {
                            if (array[k][j]>array[k][j+1])
                            {
                             int tmp=array[k][j];
                             array[k][j]=array[k][j+1];
                             array[k][j+1]=tmp;
                            }
                        };
           min_array[k]=array[k][0];
           cout<<min_array[k]<<" ";
        }

что не хватает по одному прогону в строке. Ведь где-то рядом отгадка, но не лезет в голову.
 
Текущее время: 07:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru