-1

この質問に問題があります:

テスト結果のリスト (それぞれにテスト日、学生 ID、および学生のスコアを含む) が与えられます。各生徒の最終スコアを返します。学生の最終スコアは、5 つの最高スコアの平均として計算されます。各生徒が少なくとも 5 つのテストの点数を持っていると想定できます。

さて、これが問題です。答えは欲しくない。

ハッシュを試してみましたが、ハッシュはキーにアドレスを提供できるため、うまくいきませんでした。

平均を計算して上位 5 つのスコアを返すと考えられていた配列リストを使用することを考えましたが、学生 ID で数値を割り当てるにはどうすればよいですか?

出力を次のようにしたいとします。マイク、15.これは質問が必要とするものではありませんか? 学生証と平均人数を取得します。いくつかの手がかりを教えてください、私は学んでいます。

4

2 に答える 2

3

テスト結果を学生 ID (メジャー ソート キー) とスコアの降順 (マイナー ソート キー) で並べ替えてから、次のようにコレクションを調べます (疑似コード)。

lastId = element[0].Id - 1
for each record in element[]:
    if record.Id != lastId:
        lastId = record.Id
        counter = 5
        sum = 0
    if counter > 0:
        sum = sum + record.score
        counter = counter - 1
        if counter == 0:
            print "Student ", record.Id, " got average of ", (sum / 5)

データが並べ替えられているため、特定の生徒のすべての点数がまとめられており、最初の 5 点が最高であることがわかります。したがって、上記のコードを使用すると、すべてを解決できます。

これは、「すべての生徒が少なくとも 5 つの結果を持っている」というルールに依存していることに注意してください。それがなければ、平均計算コードを変更しなければならず、場合によっては最後の生徒に対してポストワーク ループを実行する必要があります。

于 2013-02-20T05:53:26.367 に答える
0

オブジェクト指向の原則を使用します。ここにいくつかのヒントがあります。各テストを表す Test クラスを作成します。

class Test
{
  Date date;
  Student s;          //store instance of student- has a relationship to Student
  double[] scores;     //store test scores
  double finalscore;  //final score
  Test() {
  //Initialize scores array and assign default values (0)
  }
}

各生徒を表す Student クラスを作成します。

class Student
{
  String name;
  int id;
}

テストの配列リストを作成します。

List<Test> tests = new ArrayList<Test>();

これで、テストをループして平均を見つけて finalscore に保存するだけです。

于 2013-02-20T06:01:36.953 に答える