結果

問題 No.39 桁の数字を入れ替え
ユーザー neko_the_shadowneko_the_shadow
提出日時 2016-09-18 00:08:28
言語 Scheme
(Gauche-0.9.14)
結果
WA  
実行時間 -
コード長 1,408 bytes
コンパイル時間 71 ms
コンパイル使用メモリ 6,816 KB
実行使用メモリ 16,128 KB
最終ジャッジ日時 2024-04-28 15:22:42
合計ジャッジ時間 1,013 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 21 ms
15,872 KB
testcase_01 AC 20 ms
16,128 KB
testcase_02 AC 23 ms
15,872 KB
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 AC 21 ms
16,000 KB
testcase_08 AC 21 ms
15,872 KB
testcase_09 AC 22 ms
16,000 KB
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 AC 20 ms
15,872 KB
testcase_15 AC 20 ms
15,872 KB
testcase_16 AC 19 ms
16,128 KB
testcase_17 AC 21 ms
15,872 KB
testcase_18 AC 20 ms
15,872 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

; 数字をベクタに変換する ex. 981 => #(9 8 1)
(define (number->vector number)
    (let loop ((x number) (ls '()))
        (if (zero? x)
            (list->vector ls)
            (loop (quotient x 10) (cons (modulo x 10) ls)))))

; ベクタをスワップする ex. (vector-swap #(9 8 1) 0 1) => #(8 9 1)
(define (vector-swap! v a b)
    (let ((temp (vector-ref v a)))
        (vector-set! v a (vector-ref v b))
        (vector-set! v b temp)
        v))

; ベクタを数字に変換する ex. #(9 8 1) => 981
(define (vector->number v)
    (let loop ((i 0) (number 0))
        (if (= i (vector-length v))
            number
            (loop (+ i 1)
                  (+ (* 10 number) (vector-ref v i))))))

; 1. 最上位以外において、もっとも大きい数字xを探す
; 2. xが最上位の数より大きい場合はswap
(define (solve n)
    (let ((v (number->vector n)))
        (let loop ((i (- (vector-length v) 1)) 
                   (t (- (vector-length v) 1)))
            (if (zero? i)
                (if (< (vector-ref v i) (vector-ref v t))
                    (vector->number (vector-swap! v i t))
                    (vector->number v))
                (if (> (vector-ref v i) (vector-ref v t))
                    (loop (- i 1) i)
                    (loop (- i 1) t))))))


(define (MAIN)
    (let ((n (read)))
        (display (solve n))
        (newline)))

(MAIN)
0