結果
問題 | No.280 歯車の問題(1) |
ユーザー | くわい |
提出日時 | 2015-09-21 23:30:45 |
言語 | Scala(Beta) (3.4.0) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,545 bytes |
コンパイル時間 | 8,127 ms |
コンパイル使用メモリ | 291,204 KB |
最終ジャッジ日時 | 2024-11-14 19:14:40 |
合計ジャッジ時間 | 8,535 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
[31m[31m-- [E040] Syntax Error: Main.scala:48:32 ---------------------------------------[0m[0m [31m48 |[0m [33mdef[0m [36mmain[0m([36margs[0m: [35mArray[0m[[35mString[0m]) { [31m[31m |[0m ^[0m [31m |[0m '=' expected, but '{' found [31m[31m-- [E007] Type Mismatch Error: Main.scala:34:22 --------------------------------[0m[0m [31m34 |[0m reductionParent + [31m"/"[0m + reductionChild [31m[31m |[0m ^^^[0m [31m |[0m Found: ([32m"/"[0m : String) [31m |[0m Required: BigDecimal [31m |[0m [31m |[0m longer explanation available when compiling with `-explain` 2 errors found
ソースコード
import scala.annotation.tailrec object Problem280 { def proc(z: List[BigDecimal]) = { @tailrec def calcLastTheta(child: BigDecimal, parent: BigDecimal, z: List[BigDecimal]): (BigDecimal, BigDecimal) = { z match { case (head :: Nil) => (child, parent) case (head :: next :: tail) => { val c = child * head val p = parent * next // 毎回約分することで桁あふれを起こさない val g = gcd(c, p) val rc = c / g val rp = p / g calcLastTheta(rc, rp, z.tail) } case _ => throw new IllegalStateException("2 <= N <= 50なので起こり得ない") } } // θjを求める val (child, parent) = calcLastTheta(1, 1, z) // gcdで最大公約数求めて約分する val g = gcd(child, parent) val reductionChild = child / g val reductionParent = parent / g // 1/(child/parent) なので parent/child を表示 reductionParent + "/" + reductionChild } @tailrec def gcd(m: BigDecimal, n: BigDecimal): BigDecimal = { if (n == 0) { m } else { gcd(n, m % n) } } // N // z1 z2 ... zN def main(args: Array[String]) { val N = scala.io.StdIn.readInt() val z = scala.io.StdIn.readLine().split(" ").map(x => BigDecimal(x)).toList val result = proc(z) println(result) // test } def test = { assert(proc(List(20, 40)) == "2/1") assert(proc(List(10, 10, 10)) == "1/1") assert(proc(List(20, 60)) == "3/1") } }