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

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

Войти
Регистрация
Восстановить пароль
 
лыс
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 50
#1

задача: вывести цифры из матрицы по диагонали - C++

22.12.2012, 16:03. Просмотров 631. Ответов 3
Метки нет (Все метки)

Не могу решить задачу, для профессионалов очень проста: вывести числа из матрицы по диагонали
Привожу свой код

1313. К вопросу о спорте
Ограничение времени: 0.5 секунды
Ограничение памяти: 16 МБ
Уральские медики очень озабочены состоянием здоровья молодежи. Как показали исследования, многие талантливые студенты вместо того, чтобы играть в футбол, кататься на коньках или велосипедах, занимаются олимпиадами по программированию. Так они это еще и спортивным программированием называют! Ну какой же это спорт, сидеть перед монитором и думать по пять часов в день! И ладно бы только на соревнованиях два раз в год, так ведь при подготовке к очередному чемпионату у них на сидение за компьютером уходит по несколько дней в неделю! И пусть бы это были разгильдяи какие-то, так ведь лучшие студенты, говорят, что и на мировом уровне результаты показывают приличные — жалко молодежь!
Чтобы отучить студентов от вредной привычки часами сидеть у компьютеров, уральские медики придумали принципиально новую разработку — монитор с диагональной разверткой! В скором будущем его будут вручать победителям и призерам чемпионатов Урала. В специально разработанном квадратном мониторе электронный луч должен проходить экран не по горизонталям, а по диагоналям. Поскольку длины диагоналей разные, нестандартные параметры мерцания и нелинейные искажения изображения быстро отучат оболтусов пялиться в экран. Разумеется, им ничего не останется делать, кроме как идти и заниматься спортом. Проблема в том, что большинство видеокарт подают на вход монитору нормальную развертку. Для успешного внедрения нового типа монитора нужна программа-адаптер, которая преобразует квадратное изображение в формат, требуемый для ввода в квадратный монитор. Программа должна быть надежной и быстрой, поэтому её разработкой будут заниматься самые лучшие программисты — участники чемпионата Урала по спортивному программированию.
Исходные данные
В первой строке записано целое число N (1 ≤ N ≤ 100) — количество пикселей на стороне квадратного монитора. Далее идут N строк, в каждой по N целых чисел в пределах от 1 до 100, разделенных пробелом. Это изображение, которое выводит обычная видеокарта (как видно, глубина цветности у нового монитора небольшая, все равно нормальному программисту больше ста цветов и не надо).
Результат
На выходе преобразователя должна получиться последовательность для ввода в новый монитор. Пиксели нумеруются от левого верхнего угла, по диагоналям, слева-направо и снизу-вверх. Подробнее объяснять тут долго и неинтересно, посмотрите на пример, дальше сами догадаетесь.
Пример
исходные данные результат

4
1 3 6 10
2 5 9 13
4 8 12 15
7 11 14 16



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

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
#include <iostream>
 
using namespace std;
 
int main()
{
int i, j, b, c, N, a=1;
int *mas1=new int[60];
int *mas2=new int[60];
int **mas=new int*[100];
 for (i=0; i<=99; i++)
  mas[i]=new int [100];
 
cin >> N;
for (i=0; i<=N-1;i++)
 for (j=0; j<=N-1; j++)
  cin >> mas[i][j];
 
mas1[0]=mas[0][0];
for (i=0; i<=N-1; i++)
 {
b=i;
 while (b>=0)
 {
 j++;
 b--;
 while (j!=b)
 {
 mas1[a]=mas[b][j];
 a++;
 }
 if (b==j)
     j=0;
     break;
 
 }
 }
for(a=0;; a++)
 cout << mas1[a] << " " << endl;
 
    return 0;
}
 Комментарий модератора 
Правила форума п. 5.5: Запрещено размещать тему в нескольких разделах одновременно (кросспостинг), а также дублировать тему в одном разделе.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 16:03     задача: вывести цифры из матрицы по диагонали
Посмотрите здесь:
Задача на диагонали квадратной матрицы C++
Вывести диагонали матрицы. Не компилирует! C++
C++ Вывести минимальные элементы каждой диагонали матрицы
Вывести минимальный элемент главной диагонали заданной матрицы C++
Среди элементов главной диагонали матрицы вывести наибольший элемент C++
Вывести на консоль значения элементов заданной матрицы змейкой по диагонали C++
C++ Вывести все элементы матрицы, находящиеся выше главной диагонали
C++ Вывести на экран числа побочной диагонали матрицы но возрастанию и убыванию
C++ Вывести на экран сумму и значение чисел ниже главной диагонали матрицы
Вывести строку матрицы, в которой элемент, стоящий на главной диагонали, максимален C++
Вывести в одну строку все элементы главной диагонали матрицы, начиная с правого нижнего угла C++
Вывести вектор, образуемый элементами главной диагонали матрицы, и результат умножения указанного вектора на заданную матрицу C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2012, 16:13     задача: вывести цифры из матрицы по диагонали #2
лыс, очень много букв. Лучше спрашивайте конкретно, что не понятно.
лыс
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 50
22.12.2012, 16:26  [ТС]     задача: вывести цифры из матрицы по диагонали #3
Я создал новую тему, там понятно, посмотрите пожалуйста

Добавлено через 3 минуты
Есть Матрица N на N. В ней случайные числа. Необходимо вывести эти цифры на экран но в следующей последовательности: от левого верхнего угла, по диагоналям, слева-направо и снизу-вверх. Подробнее объяснять тут долго и неинтересно, посмотрите на пример, дальше сами догадаетесь.
Пример
исходные данные

4
1 3 6 10
2 5 9 13
4 8 12 15
7 11 14 16

результат

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
22.12.2012, 17:50     задача: вывести цифры из матрицы по диагонали #4
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
int main()
{
    const int n = 5;
    int matrix[n][n];
    int arr[n * n];
    int i, j, k, lim;
   
    srand(static_cast<unsigned int>(time(0)));
    
    for(i = 0; i < n; ++i)
    {
        for(j = 0; j < n; ++j)
        {
            matrix[i][j] = rand() % 100;
        }
    }
    
    std::cout << "\nMatrix:\n";
    for(i = 0; i < n; ++i)
    {
        for(j = 0; j < n; ++j)
        {
            std::cout << std::setw(5) << matrix[i][j] << " ";
        }
        std::cout << "\n";
    }
    
    k = 0;
    
    for (i = 0; i < 2 * n; ++i)
    {
        lim = i >= n ? n - 1 : i; 
    
        if (i % 2 == 0) 
            for (j = lim; j >= i - lim; --j)
                arr[k++] = matrix[i - j][j];
    
        else
            for(j = i - lim; j <= lim; ++j)
                arr[k++] = matrix[i - j][j];
    }
    
    std::cout << "\nArray:\n";
    for(i = 0; i < n * n; ++i)
    {
        std::cout << arr[i] << " ";
    }
    
            
    return 0;
}
Yandex
Объявления
22.12.2012, 17:50     задача: вывести цифры из матрицы по диагонали
Ответ Создать тему
Опции темы

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