Как найти обратную диагональ массива

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace sort_2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] a = new int[4, 4];
            int max;
            Random rnd = new Random();
            for (int i = 0; i < 4; i++)
                for (int j = 0; j < 4; j++)
                    a[i, j] = rnd.Next(10);
            Console.WriteLine("           Начальная состояние           Максимальный и минимальный элемент массива");
            for (int i = 0; i < 4; i++)
            {
                max = a[i, 0];
                for (int j = 0; j < 4; j++)
                {
                    if (a[i, j] > max) max = a[i, j];
                    Console.Write("t{0} ", a[i, j]);
                }
                Console.Write("t Max элемент = {0} | ", max);
                Console.WriteLine();
            }
            Console.WriteLine("Сортировка Пузырком");
            int z;
            for (int q = 1; q < 4; q++)
            {
                for (int i = 0; i < 4; i++)
                {
                    for (int j = 0; j < 4 - q; j++)
                    {
                        if (1 % 2 == 0)
                        {
                            if (a[i, j + 1] < a[i, j])
                            {
                                z = a[i, j + 1];
                                a[i, j + 1] = a[i, j];
                                a[i, j] = z;
                            }
                        }
                        else
                        {
                            if (a[i, j + 1] > a[i, j])
                            {
                                z = a[i, j + 1];
                                a[i, j + 1] = a[i, j];
                                a[i, j] = z;
                            }
                        }
                    }
                }
            }
            for (int i = 0; i < 4; i++)
            {
                max = a[i, 0];
                for (int j = 0; j < 4; j++)
                {
                    if (a[i, j] < max) max = a[i, j];
                    Console.Write("t{0}", a[i, j]);
                }
                Console.Write("t Min элемент = {0} | ", max);
                Console.WriteLine();
            }
        }
    }
}

#Как взять побочную (противоположную) диагональ массива? Требуется изменить обе диагонали массива на единицы

my_array = np.zeros((7, 7))
d = np.diag_indices(7)
my_array[d] = 1

[[1. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 1.]]

задан 9 июн 2022 в 17:41

30yojun's user avatar

Если массив состоит только из нулей, а не каких либо других значений, то можно сделать следующими тремя способами:

  1. При помощи функции np.fliplr(), позволяющей перевернуть массив относительно оси X и представить главную диагональ как побочную и наоборот;
  2. При помощи np.flip(my_array, axis=1), по сути делающая то же самое при помощи аргументов;
  3. При помощи срезов: my_array[:,::-1] — это если забавы ради :)
import numpy as np

my_array = np.zeros((7, 7))
d = np.diag_indices(7)
my_array[d] = 1
np.fliplr(my_array)[d] = 1
# my_array[:,::-1][d] = 1
# np.flip(my_array, axis=1)[d] = 1

print(my_array)

Если говорить про общие решения, то могу предложить, например, развернуть второй член кортежа:

import numpy as np

my_array = np.zeros((7, 7))
d = np.diag_indices(7)
my_array[d] = 1
d = d[0], d[1][::-1]
my_array[d] = 1

print(my_array)

ответ дан 9 июн 2022 в 17:58

4500zenja's user avatar

4500zenja4500zenja

3,9124 золотых знака9 серебряных знаков22 бронзовых знака

Ну вы перед тем как вопрос задавать — прочитайте этот форум ну хоть бы за три предыдущих дня.
Вот ваша задача и ваш ответ:

Как по аналогии сделать проверку на диагональ?

ответ дан 9 июн 2022 в 20:31

passant's user avatar

passantpassant

11.5k2 золотых знака9 серебряных знаков16 бронзовых знаков

Given a square matrix of order n*n, we have to reverse the elements of both diagonals.

Examples:  

Input : {1, 2, 3,
         4, 5, 6,
         7, 8, 9}
Output :{9, 2, 7,
         4, 5, 6,
         3, 8, 1}
Explanation: 
             Major Diagonal Elements before:  1 5 9
                             After reverse:   9 5 1
             Minor Diagonal Elements before:  3 5 7
                             After reverse:   7 5 3 
Input :{1,  2,  3,  4,
        5,  6,  7,  8,
        9,  10, 11, 12,
        13, 14, 15, 16}

Output :{16, 2, 3, 13,
         5, 11, 10, 8,
         9, 7,  6,  12,
         4, 14, 15, 1}
 

Implementation:

C++

#include <bits/stdc++.h>

using namespace std;

#define N 4

void reverseDiagonal(int array[][N])

{

    int i = 0, j = N;    

    while (i < j) {

        swap(array[i][i], array[j - 1][j - 1]);

        swap(array[i][j - 1], array[j - 1][i]);

        i++;

        j--;

    }

    for (int i = 0; i < N; ++i) {

        for (int j = 0; j < N; ++j)

            printf("%d ", array[i][j]);

        printf("n");

    }

}

int main()

{

    int matrix[N][N] = { 1, 2,  3,  4,

                         5, 6,  7,  8,

                         9, 10, 11, 12,

                        13, 14, 15, 16 };

    reverseDiagonal(matrix);

    return 0;

}

Java

import java.io.*;

class GFG 

{

static int N = 4;

static void reverseDiagonal(int array[][])

{

    int i = 0, j = N; 

    int temp = 0;

    while (i < j)

    {

        temp = array[i][i];

        array[i][i] = array[j - 1][j - 1];

        array[j - 1][j - 1] = temp;

        temp = array[i][j - 1];

        array[i][j - 1] = array[j - 1][i];

        array[j - 1][i] = temp;

        i++;

        j--;

    }

    for (i = 0; i < N; ++i) 

    {

        for (j = 0; j < N; ++j)

            System.out.print(array[i][j] + " ");

            System.out.println();

    }

}

public static void main (String[] args)

{

    int matrix[][] = {{1, 2, 3, 4},

                      {5, 6, 7, 8},

                      {9, 10, 11, 12},

                      {13, 14, 15, 16}};

    reverseDiagonal(matrix);

}

}

Python 3

N = 4

def reverseDiagonal(array):

    i = 0

    j = N

    while (i < j) :

        array[i][i], array[j - 1][j - 1] = array[j-1][j-1], array[i][i]

        array[i][j - 1], array[j - 1][i] = array[j-1][i], array[i][j-1]

        i += 1

        j -= 1

    for i in range(N):

        for j in range( N):

            print( array[i][j],end=" ")

        print()

if __name__ == "__main__":

    matrix = [[ 1, 234],

                        [5, 678],

                        [9, 10, 11, 12],

                        [13, 14, 15, 16 ]]

    reverseDiagonal(matrix)

C#

using System;

class GFG 

{

static int N = 4;

static void reverseDiagonal(int [,]array)

{

    int i = 0, j = N; 

    int temp = 0;

    while (i < j)

    {

        temp = array[i, i];

        array[i, i] = array[j - 1, j - 1];

        array[j - 1, j - 1] = temp;

        temp = array[i, j - 1];

        array[i, j - 1] = array[j - 1, i];

        array[j - 1, i] = temp;

        i++;

        j--;

    }

    for (i = 0; i < N; ++i) 

    {

        for (j = 0; j < N; ++j)

            Console.Write(array[i, j] + " ");

            Console.WriteLine();

    }

}

public static void Main ()

{

    int [,]matrix = {{1, 2, 3, 4},

                     {5, 6, 7, 8},

                     {9, 10, 11, 12},

                     {13, 14, 15, 16}};

    reverseDiagonal(matrix);

}

}

PHP

<?php

function reverseDiagonal($array)

{

    $N = 4;

    $i = 0; $j = $N

    $temp = 0;

    while ($i < $j)

    {

        $temp = $array[$i][$i];

        $array[$i][$i] = $array[$j - 1][$j - 1];

        $array[$j - 1][$j - 1] = $temp;

        $temp = $array[$i][$j - 1];

        $array[$i][$j - 1] = $array[$j - 1][$i];

        $array[$j - 1][$i] = $temp;

        $i++;

        $j--;

    }

    for ($i = 0; $i < $N; ++$i

    {

        for ($j = 0; $j < $N; ++$j)

            echo $array[$i][$j] . " ";

            echo "n";

    }

}

$matrix = array(array(1, 2, 3, 4),

                array(5, 6, 7, 8),

                array(9, 10, 11, 12),

                array(13, 14, 15, 16));

reverseDiagonal($matrix);

Javascript

<script>

let N = 4;

function reverseDiagonal(array)

{

    let i = 0, j = N;

    let temp = 0;

    while (i < j)

    {

        temp = array[i][i];

        array[i][i] = array[j - 1][j - 1];

        array[j - 1][j - 1] = temp;

        temp = array[i][j - 1];

        array[i][j - 1] = array[j - 1][i];

        array[j - 1][i] = temp;

        i++;

        j--;

    }

    for (i = 0; i < N; ++i)

    {

        for (j = 0; j < N; ++j)

            document.write(array[i][j] + " ");

            document.write("<br>");

    }

}

    let matrix = [[1, 2, 3, 4],

                    [5, 6, 7, 8],

                    [9, 10, 11, 12],

                    [13, 14, 15, 16]];

    reverseDiagonal(matrix);

</script>

Output

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

Time Complexity: O(N2) for printing the matrix
Auxiliary Space: O(1)

Last Updated :
20 Feb, 2023

Like Article

Save Article

Как найти сумму на обратной дагонали двухмерного массива?

Имеется двухмерный массив 5×5, нужно найти сумму на обратной диагонали.
Помогите пожалуйста никак не могу придумать алгоритм.

var result = document.getElementById("result");
	var arr = [] , rand, sum = 0;

	for(var i = 0; i < 5; i++) {
		arr.push([]);
		arr[i].push(rand);

		for(var j = 0; j < 5; j++) {
			rand = Math.floor(Math.random()*91 + 10);
			arr[i][j] = rand;
			result.innerHTML += arr[i][j]+ " | ";
		}
	}

JSFiddle

Пример:
b869a3f102534c0aad4e985987dccb71.png


  • Вопрос задан

    более трёх лет назад

  • 259 просмотров

«Обратные диагонали» характерны тем, что сумма координат X и Y в рамках одной диагонали постоянна. Алгоритм:

  1. подготовить массив сумм из (5 * 2 — 1) элемента, заполненный нулями.
  2. пройтись по всем элементам массива. Сложив координаты получаем id диагонали – он же индекс в массиве сумм.
  3. прибавляем текущий элемент к нужной сумме.
// суммы – где сумма координат X + Y = N, для каждой диагонали N постоянно
var side = 5,
  sum = Array.apply(null, Array(side * 2 - 1)).map(Number.prototype.valueOf,0),
	row, col
;

for( row = 0; row < side; row++) {
  for( col = 0; col < side; col++) {
	  sum[row + col] += arr[row][col];
	}
}

result.innerHTML += '<pre>' + JSON.stringify(sum) + '</pre>';

fiddle

Пригласить эксперта

arr[0][4] + arr[1][3] + arr[2][2] + arr[3][1] + arr[4][0]

?

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

let arr = [[1,2,3],[2,3,4],[3,4,5]];
let res = arr.reduce((res, curr, ind)=>{
  return res + curr[curr.length - ind - 1];
},0);
console.log(res);


  • Показать ещё
    Загружается…

29 мая 2023, в 16:43

7000 руб./за проект

29 мая 2023, в 16:37

500 руб./за проект

29 мая 2023, в 16:15

10000 руб./за проект

Минуточку внимания

Старый

03.09.2018, 14:31

Интересующийся

Отправить личное сообщение для Роман1479

Посмотреть профиль

Найти все сообщения от Роман1479

 

Регистрация: 06.10.2017

Сообщений: 24

Найти побочную диагональ двумерного массива js

var matrix4D = [
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 1, 1
];
function_matrix(matrix4D);
/* alert(matrix4D); */

function function_matrix(arr){
    var n = arr.length;
    var step = Math.sqrt(arr.length) - 1;

    for (var i = step; i < n - step; i += step) { 
        console.log(arr[i]);
        alert(arr[i]);
    }
}

Я ее нашел, но как сделать с такой матрицей как ниже ( выводит undefined ), помогите пожалуйста.
( должен вывести 3 6 2 и 9 )

var matrix4D = [
  1, 1, 1, 3,
  1, 1, 6, 1,
  1, 2, 1, 10,
  9, 1, 1, 1,
  1, 1, 11, 1
];

или
( должен вывести 5 3 и 1 )

var matrix4D = [
  1, 2, 3, 4, 5,
  1, 1, 1, 3, 4, 
  1, 1, 1, 1, 1,
];

Ответить с цитированием

Старый

03.09.2018, 14:54

Аватар для рони

Профессор

Отправить личное сообщение для рони

Посмотреть профиль

Найти все сообщения от рони

 

Регистрация: 27.05.2010

Сообщений: 32,891

Ответить с цитированием

Старый

03.09.2018, 15:12

Аватар для рони

Профессор

Отправить личное сообщение для рони

Посмотреть профиль

Найти все сообщения от рони

 

Регистрация: 27.05.2010

Сообщений: 32,891

Роман1479,

var matrix4D = [
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 1, 1
];
var matrix4_D = [
  1, 1, 1, 3,
  1, 1, 6, 1,
  1, 2, 1, 10,
  9, 1, 1, 1,
  1, 1, 11, 1
];


var matrix5D = [
  1, 2, 3, 4, 5,
  1, 1, 1, 3, 4,
  1, 1, 1, 1, 1
];

function function_matrix(arr, num){
    var l = Math.min(num, arr.length/num)
    var n = --num;
    var res = [];

    for (var i = 0; i < l; i++) {
        res.push(arr[n])
        n += num
    }
    return res
}
alert(function_matrix(matrix4D, 4));
alert(function_matrix(matrix4_D, 4));
alert(function_matrix(matrix5D, 5));

Ответить с цитированием

Старый

03.09.2018, 15:12

Интересующийся

Отправить личное сообщение для Роман1479

Посмотреть профиль

Найти все сообщения от Роман1479

 

Регистрация: 06.10.2017

Сообщений: 24

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

Ответить с цитированием

Старый

03.09.2018, 15:38

Аватар для рони

Профессор

Отправить личное сообщение для рони

Посмотреть профиль

Найти все сообщения от рони

 

Регистрация: 27.05.2010

Сообщений: 32,891

Роман1479,

var matrix4D = [
  [1, 1, 1, 1],
  [1, 1, 1, 1],
  [1, 1, 1, 1],
  [1, 1, 1, 1]
];
var matrix4_D = [
  [1, 1, 1, 3],
  [1, 1, 6, 1],
  [1, 2, 1, 10],
  [9, 1, 1, 1],
  [1, 1, 11, 1]
];


var matrix5D = [
  [1, 2, 3, 4, 5],
  [1, 1, 1, 3, 4],
  [1, 1, 1, 1, 1]
];

function function_matrix(arr){
    var num = arr[0].length;
    var l = Math.min(num, arr.length)
    var n = --num;
    var res = [];

    for (var i = 0; i < l; i++) {
        res.push(arr[i][n])
        --n
    }
    return res
}
alert(function_matrix(matrix4D));
alert(function_matrix(matrix4_D));
alert(function_matrix(matrix5D));

Ответить с цитированием

Старый

03.09.2018, 16:16

Аватар для ksa

CacheVar

Отправить личное сообщение для ksa

Посмотреть профиль

Найти все сообщения от ksa

 

Регистрация: 19.08.2010

Сообщений: 14,057

Такой еще вариант предложу…

var matrix4D = [
  [1, 1, 1, 1],
  [1, 1, 1, 1],
  [1, 1, 1, 1],
  [1, 1, 1, 1]
];
var matrix4_D = [
  [1, 1, 1, 3],
  [1, 1, 6, 1],
  [1, 2, 1, 10],
  [9, 1, 1, 1],
  [1, 1, 11, 1]
];
var matrix5D = [
  [1, 2, 3, 4, 5],
  [1, 1, 1, 3, 4],
  [1, 1, 1, 1, 1]
];
alert(function_matrix(matrix4D));
alert(function_matrix(matrix4_D));
alert(function_matrix(matrix5D));
function function_matrix(arr){
    var col = arr[0].length;
	var row = 0;
    var res = [];
	while ((col > -1) && (row < arr.length)) {
        res.push(arr[row++][--col]);
    }
    return res
};


Последний раз редактировалось ksa, 03.09.2018 в 16:22.

Ответить с цитированием

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти фотки в телефоне через компьютер
  • Как найти арр в телефоне
  • Как найти объем боковой поверхности куба
  • Как нашли убийц кравченко
  • Нормативный договор как составить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии