撰寫一個程式,列印以下序列的一部分:1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 ...(重復次數等于各自的次數)。輸入是一個正整數 n——程式應該列印的序列元素的數量。輸出數字序列,寫在一行中,用空格分隔。這里的想法是使用 while 回圈而不是 for 回圈。
例如,如果 n 是 7,程式應該輸出 1 2 2 3 3 3 4(七個數字)。
樣本輸入:8
樣品輸出:1 2 2 3 3 3 4 4
我試著寫這個代碼:
fun main() {
val input = readLine()!!.toInt()
var counter = 0
var i = 0
var j = 0
while(i <= input) {
while(j <= i) {
counter
print("$i ")
j
}
i
}
}
但不是得到 1 2 2 3 3 3 4 4
我得到這個輸出 0 1 2 3 4 5 6 7
uj5u.com熱心網友回復:
fun main() {
val input = readLine()!!.toInt()
var counter = 1
var i = 1
var j = i
while(counter <= input) {
j = i
while(j > 0 && counter <= input) {
print("$i ")
j--
counter
}
i
}
}
另一個具有 O(n) 時間復雜度和額外空間的解決方案。
fun main() {
val input = readLine()!!.toInt()
var counter = 1
var printed = 0
var map = mutableMapOf<Int,Int>()
while (printed < input) {
print("$counter ")
printed
if(map[counter] ?: 0 < counter - 1) {
map[counter] = if(map[counter] == null) 1 else (map[counter] ?: 0) 1
continue
} else {
counter
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/342580.html
標籤:科特林
