2

我正在尝试使用 Scala 从标准输入读取格式化输入:

等效的 C++ 代码在这里:

int main() {
  int t, n, m, p;
  cin >> t;
  for (int i = 0; i < t; ++i) {
    cin >> n >> m >> p;
    vector<Player> players;
    for (int j = 0; j < n; ++j) {
      Player player;
      cin >> player.name >> player.pct >> player.height;
      players.push_back(player);
    }
    vector<Player> ret = Solve(players, n, m, p);
    cout << "Case #" << i + 1 << ": ";
    for (auto &item : ret) cout << item.name << " ";
    cout << endl;
  }
  return 0;
}

我想在 Scala 代码中的哪个位置使用

players: List[Player], n: Int, m: Int, p: Int

来存储这些数据。

有人可以提供示例代码吗?

或者,让我知道如何:

  1. “main()”函数如何在 scala 中工作
  2. 从标准输入读取格式化文本
  3. 有效地从输入构造一个列表(因为列表是不可变的,也许有一种更有效的方法来构造它?而不是在每个元素进入时都有一个新列表?)
  4. 将格式化文本输出到标准输出

谢谢!!!

4

1 回答 1

1

我不知道 C++,但是这样的东西应该可以工作:

def main(args: Array[String]) = {
    val lines = io.Source.stdin.getLines
    val t = lines.next.toInt
    // 1 to t because of ++i
    // 0 until t for i++
    for (i <- 1 to t) {
      // assuming n,m and p are all on the same line
      val Array(n,m,p) = lines.next.split(' ').map(_.toInt)
      // or (0 until n).toList if you prefer
      // not sure about the difference performance-wise
      val players = List.range(0,n).map { j =>
        val Array(name,pct,height) = lines.next.split(' ')
        Player(name, pct.toInt, height.toInt)
      }
      val ret = solve(players,n,m,p)
      print(s"Case #${i+1} : ")
      ret.foreach(player => print(player.name+" "))
      println
    }
  }
于 2013-11-26T10:32:57.797 回答