iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
SideProject30

UVA題型研究系列 第 25

DAY25: Divide, But Not Quite Conquer!

  • 分享至 

  • xImage
  •  

32 UVA10190 Divide, But Not Quite Conquer!
內容
此問題的目標是將某個整數n除以另一個整數m直到 n = 1,這方法將會獲得一個數字序列。
我們假設該序列的每個數字為a[i],假設它有k個數字(即必須進行 k−1 個連續除法才能達到 n = 1)。

根據以下限制,此序列必唯一:

  1. a[1] = n, a[i] = a[i − 1] ÷ m, for all 1 < i ≤ k
  2. a[i] 被 m 整除(a[i] mod m = 0) for all 1 ≤ i < k
  3. a[1] > a[2] > a[3] > ... > a[k]

以下為舉例:
如果n = 125且m = 5,則根據上述過程會得到125、25、5、1(做了3次除法:125/5、25/5、5/5)。
因此,k = 4,a[1] = 125、a[2] = 25、a[3] = 5、a[4] = 1。
如果n = 30且m = 3,則根據上述過程會得到30、10、3、1。
但是a[2] = 10 且 10 mod 3 = 1,違反了限制2,所以此序列不存在。
如果序列不存在,我們認為這不好玩,因此非常"Boring!"

輸入說明
輸入包含多行。
每行有兩個非負整數n和m,n和m皆小於2000000000。

輸出說明
對於每行,輸出序列a(如題目定義),序列的每個相鄰數字之間用一個空格隔開。
如果序列不存在,則輸出"Boring!"

範例輸入
125 5
30 3
80 2
81 3
範例輸出
125 25 5 1
Boring!
Boring!
81 27 9 3 1

# 進入無窮迴圈,持續等待用戶輸入
while True:
    # 讀取用戶輸入的兩個數字,並將其以空格分開,存入列表s中
    s = input().split()

    # 將輸入的兩個數字分別轉換為整數型別
    n = int(s[0])  # 第一個數字
    m = int(s[1])  # 第二個數字

    # 如果第二個數字為1,顯示'Boring!'
    if m == 1:
        print('Boring!')
    else:
        # 初始化一個列表a,將第一個數字n放入其中
        a = [n]

        # 進入迴圈,直到n等於1為止
        while n > 1:
            # 如果n能夠被m整除,將n除以m並將結果放入列表a中
            if n % m == 0:
                n = n // m
                a.append(n)
            else:
                # 如果n不能被m整除,顯示'Boring!',並跳出迴圈
                print('Boring!')
                break
        else:
            # 如果n等於1,將列表a中的數字轉換為字符串型別,並用空格連接起來,然後輸出結果
            a = [str(i) for i in a]
            print(' '.join(a))

上一篇
DAY24:All You Need Is Love
下一篇
DAY26:GCD
系列文
UVA題型研究30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言