Kotlin中如何仅向数组添加指定数量的输入?
我的问题:Kotlin中如何仅向数组添加指定数量的输入?
输入格式
- 输入第一行是单个整数,表示测试用例数量,后续为各测试用例。
- 每个测试用例包含2行输入。
- 每个测试用例的第一行是单个整数N,表示待办清单中的问题总数。
- 每个测试用例的第二行包含N个空格分隔的整数(例如:d1, d2, d3……)
我的疑惑是如何指定仅需计入数组的输入数量
原题链接:CodeChef TODOLIST 题目
示例输入
2 4 1000 2000 3000 4000 5 999 888 777 666 555
示例输出
4 0
请帮我用Kotlin解决这个问题。
我未完成的代码(缺少第三步)
fun main() { val n = readLine()!!.toInt() repeat(n) { val difficultyRating = readLine()!!.split(" ").map { it.toInt() } difficultyRating .count { it >= 1000 } .let { println(it) } } }
问题分析与解决
你的代码跳过了每个测试用例读取N的步骤,直接读取了第二行的所有输入。但按照题目要求,需要严格只取N个输入值,避免输入行存在多余数据时出错。
修正后的代码
fun main() { val testCaseCount = readLine()!!.toInt() repeat(testCaseCount) { // 读取当前测试用例的问题总数N val problemCount = readLine()!!.toInt() // 读取输入行,处理可能的空字符串后取前N个元素转成整数列表 val difficultyRatings = readLine()!!.split(" ") .filter { it.isNotEmpty() } // 处理多个连续空格导致的空字符串 .take(problemCount) .map { it.toInt() } // 统计难度≥1000的问题数量并打印 println(difficultyRatings.count { it >= 1000 }) } }
代码说明
- 先读取测试用例总数
testCaseCount,循环对应次数处理每个测试用例。 - 每个测试用例先读取
problemCount(即题目中的N),明确需要读取的输入数量。 - 读取第二行输入后,用
filter { it.isNotEmpty() }处理连续空格产生的空字符串,再用take(problemCount)确保只取前N个输入值,最后转成整数列表。 - 统计列表中≥1000的元素数量并打印结果。
内容的提问来源于stack exchange,提问作者Saneer Sha
相关产品推荐
相关产品推荐

