4153直角三角形、2798ブラックジャック、1436映画監督


Today 12/22
直角三角形(My Code)
while true {
    let input = readLine()!.split(separator: " ").map{Int(String($0))!}.sorted(by: >)
    if input == [0,0,0] { break }
    if input[0]*input[0] == (input[1]*input[1]) + (input[2]*input[2]) {
        print("right")
    } else {
        print("wrong")
    }
}
平方を求める時はpow(value, Int),平方根を求める時はsqrt(value).
while let input = readLine(), input != "0 0 0" {
    let line = input.split(separator: " ").map{Double(String($0))!}.sorted(by: >)
    let output = pow(line[0], 2) == pow(line[1], 2) + pow(line[2], 2) ? "right" : "wrong"
    print(output)
}
昨日学んだ部分を利用して、whileの角度から濾過して、その毒性をもっと良くします.
ブラックジャック(My Code)
let NM = readLine()!.split(separator: " ").map{Int(String($0))!}
let input = readLine()!.split(separator: " ").map{Int(String($0))!}.sorted(by: <)
var output = 0

for one in 0...NM[0]-3 {
    for two in 1...NM[0]-2 {
        if two <= one { continue }
        for three in 2...NM[0]-1 {
            if three <= two { continue }
            let result = input[one] + input[two] + input[three]
            if result <= NM[1] {
                if result > output {
                    output = result
                }
            } else { break }
        }
    }
}
print(output)
同じカードの重複選択を防ぐために、if two <= one { continue }のように処理するのは、ちょっと馬鹿げています.
let NM = readLine()!.split(separator: " ").map{Int(String($0))!}
let input = readLine()!.split(separator: " ").map{Int(String($0))!}.sorted(by: <)
var output = 0

for one in 0...NM[0]-3 {
    for two in **one**+1...NM[0]-2 {
        for three in **two**+1...NM[0]-1 {
            let sumOfCards = input[one] + input[two] + input[three]
            if sumOfCards <= NM[1] {
                output = max(sumOfCards, output)
            }
        }
    }
}
print(output)
グーグル学習の過程で、学ぶべきことをたくさん運用しました.
  • for two in one+1...NM[0]-2for文は、1、2、3つの変数を使用して作成されます.
  • sumOfCardsのように、わかりやすい変数名が作成されます.
  • if/else文output = max(sumOfCards, output)ではありません.
  • 映画監督
    let input = Int(readLine()!)!
    var seriesArr: [String] = []
    
    for index in 0...3000 {
        let indexArr = String(index).map{String($0)}
        if indexArr.last == "6" {
            if indexArr.count >= 2, indexArr[indexArr.count-2] == "6" {
                if indexArr.count >= 3, indexArr[indexArr.count-3] == "6" {
                    // 666 일 때
                    if indexArr.count == 3 {
                        for sixHunSixtySix in 0...999 {
                            if sixHunSixtySix < 10 {
                                seriesArr.append("66600"+String(sixHunSixtySix))
                            } else if sixHunSixtySix >= 10, sixHunSixtySix < 100 {
                                seriesArr.append("6660"+String(sixHunSixtySix))
                            } else if sixHunSixtySix >= 100 {
                                seriesArr.append("666"+String(sixHunSixtySix))
                            }
                        }
                    } else if indexArr.count == 4 {
                        for sixHunSixtySix in 0...999 {
                            if sixHunSixtySix < 10 {
                                seriesArr.append(indexArr[0]+"66600"+String(sixHunSixtySix))
                            } else if sixHunSixtySix >= 10, sixHunSixtySix < 100 {
                                seriesArr.append(indexArr[0]+"6660"+String(sixHunSixtySix))
                            } else if sixHunSixtySix >= 100 {
                                seriesArr.append(indexArr[0]+"666"+String(sixHunSixtySix))
                            }
                        }
                    }
                } else {
                    // 66일 때
                    if indexArr.count == 2 {
                        for sixtySix in 0...99 {
                            if sixtySix < 10 {
                                seriesArr.append("6660"+String(sixtySix))
                            } else {
                                seriesArr.append("666"+String(sixtySix))
                            }
                        }
                    } else if indexArr.count == 3 {
                        for sixtySix in 0...99 {
                            if sixtySix < 10 {
                                seriesArr.append(indexArr[0]+"6660"+String(sixtySix))
                            } else {
                                seriesArr.append(indexArr[0]+"666"+String(sixtySix))
                            }
                        }
                    } else if indexArr.count == 4 {
                        for sixtySix in 0...99 {
                            if sixtySix < 10 {
                                seriesArr.append(indexArr[0]+indexArr[1]+"6660"+String(sixtySix))
                            } else {
                                seriesArr.append(indexArr[0]+indexArr[1]+"666"+String(sixtySix))
                            }
                        }
                    }
                }
            } else {
                // 6일 때
                if indexArr.count == 1 {
                    for six in 0...9 {
                        seriesArr.append("666"+String(six))
                    }
                } else if indexArr.count == 2 {
                    for six in 0...9 {
                        seriesArr.append(indexArr[0]+"666"+String(six))
                    }
                } else if indexArr.count == 3 {
                    for six in 0...9 {
                        seriesArr.append(indexArr[0]+indexArr[1]+"666"+String(six))
                    }
                } else if indexArr.count == 4 {
                    for six in 0...9 {
                        seriesArr.append(indexArr[0]+indexArr[1]+indexArr[2]+"666"+String(six))
                    }
                }
            }
        } else {
            seriesArr.append(String(index)+"666")
        }
    }
    
    seriesArr[0] = "666"
    print(seriesArr[input-1])
    1から1つずつ上がっていくのは話にならないようなので、369ゲームのように、6のとき、66のとき、666のときに分けて、いくつかのシリーズのタイトルに何の数字があるのか推測します.
    また,常に個数を求めるよりも,一度配列に保存して取り出す方が効率的であるため,配列を利用した.
    要するに、1から上がるよりも、早い時間がかかりました.でも草を見ると1から上がったみたい(配列を使用しない)
    let input = Int(readLine()!)!
    var number = 666
    var count = 0
    
    while true {
        var sixCount = 0
        var numberInstance = number
        while numberInstance != 0 {
            if numberInstance % 10 == 6 {
                sixCount += 1
            } else {
                sixCount = 0
            }
            if sixCount == 3 {
                count += 1
                break
            }
            numberInstance /= 10
        }
        
        if count == input {
            print(number)
            break
        }
        number += 1
    }
    だから解き直した
    コアコンセプトは、繰り返しInt number % 10, number / 10count検索連続の6である.