問題の説明
N×N行列のラテン正方行列であり、行列は正確にn個の異なる要素を、正確にnの各要素を有しており、各要素は、行に表示され、ただ一つの列。その名のラテン語ラテン方陣の正方形の要素のシンボルとして、ラテンアルファベットを使用して有名な物理学者と数学者オイラー。
例えば:
1 2 3
2 3 1
3 1 2
問題:N次ラテン方陣を構築する方法?
リスト
def solution_list(n):
for y in range(n):
for x in range(n):
num = (y + x) % n + 1
print(f'{num} ', end='')
print('\n')
ラウンドロビンリスト
class Node:
"""节点"""
def __init__(self, value):
self.data = value
self.next = None
def __repr__(self):
return f'Node: {self.data}'
class CircularLinkedList:
"""单循环链表"""
def __init__(self):
self.rear = None # 尾节点
def append(self, elem):
"""尾插法"""
temp = Node(elem)
if self.rear is None:
temp.next = temp
self.rear = temp
else:
temp.next = self.rear.next
self.rear.next = temp
self.rear = temp
def solution_circular_linked_list(n):
clist = CircularLinkedList()
for i in range(1, n + 1):
clist.append(i)
cur = clist.rear
while cur.next is not clist.rear:
cur = cur.next
temp = cur
for _ in range(n):
print(f'{temp.data} ', end='')
temp = temp.next
print('\n')