首頁 >後端開發 >Python教學 >我的Python語言解決方案來完成每週挑戰的美麗安排

我的Python語言解決方案來完成每週挑戰的美麗安排

Barbara Streisand
Barbara Streisand原創
2024-12-27 02:40:10172瀏覽

My Python Language Solution to Task Beautiful Arrangement from The Weekly Challenge

一、簡介

每週挑戰賽由 Mohammad S. Anwar 組織,是一場友好的競賽,開發者透過解決兩個任務進行競爭。它鼓勵所有語言和級別的開發者透過學習、分享和娛樂來參與。

每週挑戰賽的任務 1:美麗排列邀請開發者從正整數產生的所有排列中找出美麗排列 排列的數量。

在這篇文章中,我討論並提出我的解決方案,任務 1:美麗的安排,並結束一個簡短的結論。

每週挑戰 300 截止日期為 2024 年 12 月 23 日星期日 23:59(英國時間)。為了避免偏見,請考慮在比賽後閱讀這篇文章。

2. 任務一:美麗的佈置

給你一個正整數,$int。

編寫一個腳本來傳回您可以從 $int 建構的漂亮排列的數量。

如果對於每個 i (1

  1. permutation[i] 能被 i 整除
  2. i 可被排列[i]整除

每週挑戰300,任務1:美麗的佈置

範例 1 和 2 展示了給定輸入的預期輸出。

實施例1

Input: $n = 2
Output: 2

對於 n = 2 且有 i 個整數 (1

排列 (1, 2) 是一個美麗的排列,因為它的所有元素都符合第一個條件:

  • 當 i = 1 時,排列[1] = 1 滿足第一個條件,因為 1 可以被 1 整除。
  • 在 i = 2 時,排列[2] = 2 滿足第一個條件,因為 2 可以被 2 整除。

排列(2, 1)也是一個漂亮的排列,因為它的所有元素都符合第一個或第二個條件:

  • 當 i = 1 時,排列[1] = 2 滿足第一個條件,因為 2 可以被 1 整除。
  • 當 i = 2 時,permutation[2] = 1 滿足第二個條件,因為 2 可以被 1 整除。

實施例2

Input: $n = 1
Output: 1

實施例3

Input: $n = 10
Output: 700

3.我對任務1的解決方案

from itertools import permutations

def generate_permutations(n)
    iterable = list(range(1, n + 1))
    return permutations(iterable)

def count_beautiful_arrangements(perms):
    num_beautiful_arr = 0
    for perm in perms:
        is_beautiful_arr = True
        for value_index, value in enumerate(perm):
            if value % (value_index + 1) == 0:
                continue
            elif (value_index + 1) % value == 0:
                continue
            else:
                is_beautiful_arr = False
                break
        if is_beautiful_arr == True:
            num_beautiful_arr += 1
    return num_beautiful_arr

我的不優雅且簡單的解決方案利用了兩個函數generate_permutations和count_beautiful_arrangements。

generate_permutations 對於參數 n,傳回 1

  • iterable = list(range(1, n 1)) 產生一個整數列表,其中 1
  • permutations(iterable),從 itertools 模組匯入,產生 iterable 的所有排列。

count_beautiful_permutations 對於 permutations 可迭代 perms 參數,傳回與美麗排列條件相符的 permutations 總數。

  • perm in... 的外循環迭代每個排列。
  • 它首先假設燙髮是一種美麗的安排(is_beautiful_arr = True)。
    • value_index, value in... 的內部迴圈檢查 perm 的每個元素是否符合條件 1 或條件 2。
      • 如果所有元素都滿足任一條件,燙髮就被視為一種美麗的安排。
      • 否則,如果任何元素既不符合條件1也不符合條件2,則is_beautiful_arr設定為False,循環提前中斷,且perm不被算作漂亮的排列。

4. 結論

在這篇文章中,我討論了任務 1:美麗的安排,並提出了我的解決方案。我的「不優雅且不複雜」的解決方案有效,但它還有很大的改進空間。

以上是我的Python語言解決方案來完成每週挑戰的美麗安排的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn