Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53

Найти все дополнительные диагонали (параллельные главной диагонали) идущие с правой верхней стороны вниз налево

12.06.2018, 15:29. Показов 1298. Ответов 1

Студворк — интернет-сервис помощи студентам
Привет!Надо найти все дополнителные(паралельные основной) диагонали в матрице,которые
идут с правой верхней стороны вниз налево.Основную такую диагональ нашел.При этом
надо найти идущие строго подряд 4 и более элементов.Это то же мне здесь сказали.
Вот код для основной и дополнительных диагоналей идущих сверху слева вниз напрово:
Python
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
def finder(row,n):
   steck=[]
   for i in row:
      if not steck or steck==i:
         steck.append(i)
      else:
         if len(steck)>=n:
            break
         else:
            steck=[]
            steck.append(i)
   #print(len(steck)>=n)         
   return len(steck)>=n
def horizontal(n,m):
   for row in m:
     if finder(row,n):
       return True
   return False
def vertical(n,m):
   for col in zip(*m):
     if  finder(col,n):
        return True
   return False  
def diagonal_dopoln_left(n,m):
   N=len(m)
   for counter in range(1,N):
      diag_len=N-counter
      list1=[m[i][i+counter] for i in range(diag_len)]
      print('list1',list1)
      list2=[m[i+counter][i] for i in range(diag_len)]
      print('list2',list2)      
      if finder(list1,n):
        return True
      if finder(list2,n):
        return True      
   return False 
def diagonal_left(n,m):
   left_main_diag=[m[i][i] for i in range(len(m))]
   if finder(left_main_diag,n):
      return True 
   return False 
def checkio(matrix):
  if diagonal_dopoln_left(4,matrix):
     return True
  return False
   
    
    
  
if __name__ == '__main__':
   print(checkio([[11,12,14,17],
                  [14,15,16,10],
                  [10,18,12,11],
                  [10,81,12,11]
            ]))
   #Ответ:
   #list1 [14, 10]
   #list2 [10, 81]
   #list1 [17]
   #list2 [10]
   #False
Начал решать по вот этому нужному заданию так:
выдает ответ
Python
1
2
3
4
5
list1 [14, 10]
list2 [10, 81]
list1 [17]
list2 [10]
False
а надо
Python
1
2
3
4
5
6
[14,15,10]
[12,14]
[11]
[10,12,81]
[11,12]
[11]
Python
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
def finder(row,n):
    steck=[]
    for i in row:
        if not steck or steck==i:
            steck.append(i)
        else:
            if len(steck)>=n:
                break
            else:
                steck=[]
                steck.append(i)
    #print(len(steck)>=n)         
    return len(steck)>=n
 
def diagonal_right(n,m):
    left_main_diag=[m[i][-(i+1)] for i in range(len(m))]
    print('left_main_diag:',left_main_diag)
    if finder(left_main_diag,n):
        return True 
    return False 
 
def diagonal_dopoln_right(n,m):
    N=len(m)
    for counter in range(1,N):
        diag_len=N-counter
        list1=[m[i][(i-counter)] for i in range(diag_len)]
        print('list1',list1)
        list2=[m[(i-counter)][i] for i in range(diag_len)]
        print('list2',list2)      
        if finder(list1,n):
            return True
        if finder(list2,n):
            return True      
    return False 
 
 
def checkio(matrix):
    n=4
    if diagonal_dopoln_right(n,matrix):
        return True
    return False
 
if __name__ == '__main__':
   print(checkio([[11,12,14,17],
                  [14,15,16,10],
                  [10,18,12,11],
                  [10,81,12,11]                               
                     ]))
   #Ответ:
   #list1 [14, 10]
   #list2 [10, 81]
   #list1 [17]
   #list2 [10]
   #False
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2018, 15:29
Ответы с готовыми решениями:

Сохранить все нулевые элементы, размещенные на главной диагонали и в верхней половине области выше диагонали
Сохранить все нулевые элементы , размещенные на главной диагонали и в верхней половине области выше диагонали . Срочно!!

Сохранить все нулевые элементы, размещенные на главной диагонали и в верхней половине области выше диагонали
#include <iostream> #include <vector> using namespace std; int main(int argc, char* argv) { const int N = 6; ...

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

1
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53
14.06.2018, 16:16  [ТС]
Все решил,там и по вертикали,горизонтали и всех диагоналях:
Python
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
123
124
125
126
127
128
129
#-*-coding: utf-8 -*-
def finder(row,n=4):
   steck=[]
   for i in row:
      if not steck or steck[-1]==i:
         steck.append(i)
      else:
         if len(steck)>=n:
            break
         else:
            steck=[]
            steck.append(i)       
   return len(steck)>=n
def horizontal(m):
   for row in m:
     if finder(row):
       return True
   return False
def vertical(m):
   for col in zip(*m):
     if  finder(col):
        return True
   return False  
def diagonal_dopoln_left(m):
   N=len(m)
   for counter in range(1,N):
      diag_len=N-counter
      list1=[m[i][i+counter] for i in range(diag_len)]
      #print('list1',list1)
      list2=[m[i+counter][i] for i in range(diag_len)]
      #print('list2',list2)      
      if finder(list1):
        return True
      if finder(list2):
        return True      
   return False 
def diagonal_left(m):
   left_main_diag=[m[i][i] for i in range(len(m))]
   if finder(left_main_diag):
      return True 
   return False 
 
   
def diagonal_right(m):
   left_main_diag=[m[i][-(i+1)] for i in range(len(m))]
   #print('left_main_diag:',left_main_diag)
   if finder(left_main_diag):
      return True 
   return False 
 
def diagonal_dopoln_right(m):
   N=len(m)
   for distance in range(1,N):
      sum_tl = N - 1 - distance    # сумма индексов (верхний-левый угол)
      sum_br = N - 1 + distance    # сумма индексов (нижний-правый угол) 
      list1=[m[i][sum_tl - i] for i in range(N - distance)]
      #print('list1',list1)
      list2=[m[i][sum_br - i] for i in range(distance, N)]
      #print('list2',list2)      
      if finder(list1):
         return True
      if finder(list2):
         return True      
   return False     
 
def checkio(m):
   if horizontal(m) :
      return True
   if vertical(m):
      return True   
   if diagonal_dopoln_left(m):
      return True
   if  diagonal_left(m):
      return True    
   if diagonal_right(m):
      return True
   if diagonal_dopoln_right(m):
      return True      
   return False    
  
if __name__ == '__main__':
   #print(checkio([[0, 1, 2 , 4 , 7],
                  #[0, 4, 4 , 6 , 1],
                  #[0, 4, 8 , 2 , 1],
                  #[4, 1, 1 , 2 , 1],  
                  #[0, 1, 8 , 2 , 1] 
                     #]))
   #assert 
   assert(checkio([
       [7, 1, 1, 0,0],
       [1, 7, 7, 7,9],
       [1, 7, 7, 7,9],
       [0, 7, 1, 7,9],
       [7, 0, 1, 1,9]
       ]))== True, "Vertical" 
   #== True, "Vertical"   
   assert checkio([
      [7, 1, 4, 1],
       [1, 2, 5, 2],
       [3, 4, 1, 3],
       [1, 1, 8, 1]
       ]) == False, "Nothing here"
 
   assert checkio([
      [2, 1, 1, 6, 1],
       [1, 3, 2, 1, 1],
       [4, 1, 1, 3, 1],
       [5, 5, 5, 5, 5],
       [1, 1, 3, 1, 1]
       ]) == True, "Long Horizontal"
   assert checkio([
       [7, 1, 1, 8, 1, 1],
       [1, 1, 7, 3, 1, 5],
       [2, 3, 1, 2, 5, 1],
       [1, 1, 1, 5, 1, 4],
       [4, 6, 5, 1, 3, 1],
       [1, 1, 9, 1, 2, 1]
       ]) == True, "Diagonal"
 
   assert checkio([   [1,9,7,8,9,3,6,5,6,2],
                      [4,9,4,8,3,4,8,8,5,9],
                      [2,8,5,5,7,8,6,1,3,6],
                      [6,4,7,6,9,1,4,5,7,8],
                      [4,7,7,9,8,8,8,8,4,4], 
                      [3,7,3,2,1,9,1,8,9,1],
                      [4,7,2,4,8,1,2,3,6,2],
                      [4,4,1,3,3,3,9,2,6,7],
                      [8,6,1,9,3,5,8,1,7,5],
                      [7,3,6,5,3,6,6,4,8,2]])==True,'8'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.06.2018, 16:16
Помогаю со студенческими работами здесь

Найти сумму всех нечетных элементов выше главной диагонали и заменить ей все нечетные элементы ниже главной диагонали.
Разработать программу в среде матлаб для нахождения суммы всех нечетных элементов выше главной диагонали и замены этой суммой всех нечетных...

Напечатать все диагонали матрицы параллельные главной
Сформировать и напечатать матрицу А8×8 целых случайных чисел в диапазоне от минус 50 до 50. Напечатать все диагонали матрицы параллельные...

Файлы. Прочитать из файла все диагонали, параллельные главной, вывести построчно
Помогите пожалуйста! Создать текстовый файл, в который построчно записать квадратный массив massivnn, заполненный целыми...

Заменить в коде параллельные главной, на параллельные побочной диагонали
Вот код,нужно сделать чтобы сортировались диагонали параллельные побочной, а не главной. помогите пожалуйста. int *diag1; diag1...

Прочитать из созданного файла все диагонали, параллельные главной, и вывести их на экран построчно
Здравствуйте, помогите пожалуйста с написанием кода для следующей задачи. Задача: Создать текстовый файл, в который построчно...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru