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

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

Войти
Регистрация
Восстановить пароль
 
 
proirp
72 / 28 / 1
Регистрация: 31.07.2013
Сообщений: 394
#1

В квадратной матрице, заполненной нулями и единицами, переставить элементы согласно условию - C++

22.09.2016, 09:22. Просмотров 521. Ответов 21
Метки нет (Все метки)

Здравствуйте.
Есть такое задание:
Дан массив 8х8. Нужно вводить нули и единицы (одна единица в строке). На экран вывести исходный массив и перестроенный путем перемещения стобцов и строк так, чтобы единицы были по диагонали.

Массив создать и вывести я могу, но перемещение строк не умею делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2016, 09:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В квадратной матрице, заполненной нулями и единицами, переставить элементы согласно условию (C++):

В одномерном массиве найти максимум, сумму, переставить элементы согласно условию - C++
1)максимальный по модулю элемент массива 2)сумму элементов массива, расположенных между первым и вторым положительными элементами. ...

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

Все элементы с наибольшим по модулю значением в целочисленной квадратной матрице заменить нулями - C++
Задание: все элементы с наибольшим по модулю значением в целочисленной квадратной матрице порядка N заменить нулями. Текст проги: ...

Все элементы с наибольшим значением в целочисленной квадратной матрице порядка 10 заменить нулями - C++
Все элементы с наибольшим значением в целочисленной квадратной матрице порядка 10 заменить нулями.

Заполнить заданную область квадратной матрицы единицами, а остальное - нулями - C++
Данная действительно квадратная матрица размерности N. Заполнить матрицу в заштрихованной области единицами, в не заштрихованной - нулями.

Заполнить элементы главной диагонали матрицы нулями остальные единицами - C++
Дала целочисленная матрица nxn. Заполнить элементы: главной диагонали 0, остальные 1.

21
nmcf
5349 / 4669 / 1561
Регистрация: 14.04.2014
Сообщений: 18,595
22.09.2016, 09:37 #2
А зачем перемещать-то, если там все нули? Переставь в середину единицу в каждой строке.
0
proirp
72 / 28 / 1
Регистрация: 31.07.2013
Сообщений: 394
22.09.2016, 09:51  [ТС] #3
Цитата Сообщение от nmcf Посмотреть сообщение
если там все нули
Я же написал - в каждой строке есть ОДНА единица! В случайном месте. Нужно переставить так, чтобы получилась диагональ из единиц.
0
GbaLog-
Любитель чаепитий
3011 / 1379 / 333
Регистрация: 24.08.2014
Сообщений: 4,892
Записей в блоге: 1
Завершенные тесты: 2
22.09.2016, 10:00 #4
proirp, Так если в итоге нужна диагональ, то зачем что-либо переставлять? Просто обнуляете массив и строите по диагонали линию из единиц.
0
proirp
72 / 28 / 1
Регистрация: 31.07.2013
Сообщений: 394
22.09.2016, 10:02  [ТС] #5
Цитата Сообщение от GbaLog- Посмотреть сообщение
Просто обнуляете массив
Окей, а если все же рандомно мне нужно? )
0
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,636
Завершенные тесты: 1
22.09.2016, 10:02 #6
nmcf отметил, что, поскольку больше в каждой строке единиц нет,
то зачем их перемещать.
Заполняем диагональ единицами, а остальное нулями.
Если очень хочется, то можете найти, где были единицы и только их обнулить:
C++
1
2
3
4
5
6
7
8
9
10
11
const int n=8;
for(int i=0;i<n;i++)
{
   for(int j=0;j<n;j++)
      if(x[i][j]==1)
      {
         x[i][j]=0;
         x[i][i]=1;
         break;
      }
}
0
GbaLog-
Любитель чаепитий
3011 / 1379 / 333
Регистрация: 24.08.2014
Сообщений: 4,892
Записей в блоге: 1
Завершенные тесты: 2
22.09.2016, 10:09 #7
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
#include <iostream>
 
int main()
{
    bool arr[8][8]{};
    
    bool fake;
    for( int i{}; i < 8; ++i )
    {
        for( int j{}; j < 8; ++j )
        {
            std::cin >> fake;
        }
    }
    
    int d{};
    for( int i{}; i < 8; ++i )
    {
        for( int j{}; j < 8; ++j )
        {
            if( i == d && j == d )
                arr[i][j] = 1;
        }
        ++d;
    }
    
    for( int i{}; i < 8; ++i )
    {
        for( int j{}; j < 8; ++j )
        {
            std::cout << arr[i][j] << ' ';
        }
        std::cout << std::endl;
    }
}


Добавлено через 3 минуты
Цитата Сообщение от proirp Посмотреть сообщение
Окей, а если все же рандомно мне нужно? )
Так от заполнения не зависит.
Вот у меня в примере выше массив заполняется пользователем, например. Можно рандомно.
0
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,636
Завершенные тесты: 1
22.09.2016, 10:20 #8
GbaLog-, а зачем нужна переменная d, она же равна i?
И чем плохо такое заполнение диагонали
C++
1
2
for( int j{}; j < 8; ++j )
    arr[j][j] = 1;
???
1
Nishen
368 / 208 / 75
Регистрация: 26.02.2015
Сообщений: 992
Завершенные тесты: 2
22.09.2016, 10:39 #9
Если ввести матрицу с единицами только по строкам, например:

0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0

То как не крути (хоть по вертикали, хоть по горизонтали) 3-ий столбец, например, то единицы в столбце будут неразлучны и кочевать будут в другие столбцы при свапе.

Добавлено через 2 минуты
GbaLog-, для чего вы применяете такой синтаксис
Цитата Сообщение от GbaLog- Посмотреть сообщение
C++
1
int d{};
?
0
gru74ik
22.09.2016, 10:55
  #10

Не по теме:

Nishen, для того, чтобы показать, что знает и умеет (а, возможно, и любит) в C++14.

0
Nishen
368 / 208 / 75
Регистрация: 26.02.2015
Сообщений: 992
Завершенные тесты: 2
22.09.2016, 10:58 #11
Инициализирует переменную нулем такая конструкция.
0
proirp
72 / 28 / 1
Регистрация: 31.07.2013
Сообщений: 394
22.09.2016, 11:01  [ТС] #12
Цитата Сообщение от Nishen Посмотреть сообщение
для чего вы применяете такой синтаксис
Можно инициализировать так: int i(10); Это тоже самое, что и i = 10;
i(); все равно, что i = 0;
0
GbaLog-
Любитель чаепитий
3011 / 1379 / 333
Регистрация: 24.08.2014
Сообщений: 4,892
Записей в блоге: 1
Завершенные тесты: 2
22.09.2016, 11:19 #13
Цитата Сообщение от Nishen Посмотреть сообщение
для чего вы применяете такой синтаксис
Стильно, модно, молодежно, умею, могу, но главное -- это удобно! Так я точно гарантирую, что там мусора не будет.
Цитата Сообщение от zss Посмотреть сообщение
а зачем нужна переменная d, она же равна i?
И чем плохо такое заполнение диагонали
Чет затупил, проснулся просто недавно. Хотя было предположение, что можно по-другому.
А как вы сделали я увидел позже, чем скинул свой вариант.
0
Nishen
368 / 208 / 75
Регистрация: 26.02.2015
Сообщений: 992
Завершенные тесты: 2
22.09.2016, 11:42 #14
Цитата Сообщение от GbaLog- Посмотреть сообщение
Так я точно гарантирую, что там мусора не будет.
А в записи
C++
1
i = 0;
может появиться мусор? Или я Вас не так понял?
0
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
22.09.2016, 12:12 #15
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
//Дан массив 8х8. Нужно вводить нули и единицы (одна единица в строке).
//На экран вывести исходный массив и перестроенный путем перемещения
//стобцов и строк так, чтобы единицы были по диагонали.
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <array>
#include <iostream>
///////////////////////////////////////////////////////////////////////////////
const   int     ARR_DIM     {8};
///////////////////////////////////////////////////////////////////////////////
typedef std::array  < int,      ARR_DIM     >   T_row;
typedef std::array  < T_row,    ARR_DIM     >   T_matr;
///////////////////////////////////////////////////////////////////////////////
template < typename T_matr >
void    print_matr( T_matr  const   &   matr )
{
    for( auto   &   row     :   matr )
    {
        for( auto   &   elem    :   row )
        {
            std::cout   <<  elem  <<  ' ';
        }
        std::cout   <<  std::endl;
    }//for
    std::cout   <<  std::endl;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        T_matr  matr{{}};
 
        for( int  i{}; i < ARR_DIM; ++i )
        {
            matr[i][i]   =   1;
        }
 
        print_matr( matr );
 
        std::random_shuffle
            (
                matr.begin  (),
                matr.end    ()
            );
 
        print_matr( matr );
 
        std::sort
            (
                matr.rbegin  (),
                matr.rend    ()
            );
 
        print_matr  ( matr      );
        system      ("pause"    );
    }//for
}
1
22.09.2016, 12:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2016, 12:12
Привет! Вот еще темы с ответами:

Матрицы. Поиск области, заполненной единицами. C++ - C++
Такая задача: Дана матрица, заполненная нулями и единицами. Нужно вывести на экран максимальную область, заполненную единицами. Область...

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

По заданной квадратной матрице построить n-мерный вектор по условию - C++
Дана матрица А(nxn). Построить n-мерный вектор по правилу: если в строке матрицы с номером i есть отрицательные элементы, то bi = 0, в...

Удалить элементы в массиве согласно условию - C++
В целочисленном массиве X(N) удалить все элементы, расположенные между максимальным и минимальным элементами. Найти среднее арифметическое...


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

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

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