牛、豚、鶏、どれか一つ食べられなくなるとしたら?

1、5人分の、番号国語の点数、算数の点数を格納できるような、2次元行列を作成する

2、次にキーボードから5人の番号と国語と算数の点数を入力して配列に格納する。

3、次に国語と算数のごうけいが高いものを順に、番号と国語と算数をならびかえる。

4、最後に合計の高い順に番号を画面に出力する。

出来るだけ簡単にお願いします。forとifそして配列を組み合わせてお願いします。

A 回答 (2件)

私も Java を学び始めたのは、ごく最近です。


昨日 Eclipse という Java 製のエディタをインストールしました。

以下長文です。

日本語文字を使う場合は、文字エンコーディングに、特に気をつけて、
コピーすると良いと思います。

コマンドラインでも、-encoding オプションで指定できます。
 javac -encoding UTF-8 ソースUTF-8.java
とか、
 javac -encoding Shift_JIS ソースShift_JIS.java

本題です。
奥村晴彦、他『Java によるアルゴリズム事典』技術評論社、2003
http://oku.edu.mie-u.ac.jp/~okumura/java-algo/
を参照しています。上の URL に本文中の Java のソースが全て公開されています。
整列アルゴリズムで、選択ソートの代わりに、挿入ソートを使います。

入力:
id ? 1
lang ? 10
math ? 0
id ? 2
lang ? 5
math ? 5
id ? 3
lang ? 0
math ? 10
id ? 4
lang ? 8
math ? 8
id ? 5
lang ? 10
math ? 10

前に回答したものの出力:
in:
1 10 0
2 5 5
3 0 10
4 8 8
5 10 10
out:
5 10 10
4 8 8
1 10 0
3 0 10
2 5 5

選択ソートは安定でないので、整列はされていますが、
同じ合計点の 1、2、3 番目が、入れ替わっています。

今回の出力:
Before:
1 10 0
2 5 5
3 0 10
4 8 8
5 10 10
After:
5 4 1 2 3

挿入ソートは安定なので、同じ合計点の 1、2、3 番目の順序が
保たれています。
After: に番号だけを出力するようにしました。

納得いく回答があるまで、質問は閉じないほうが良いと思います。
わからない部分を 補足 で言ってくれるのが良いと思います。

import java.io.*;
class QA8296322No1 {
private final static int student = 5;
private final static int subject = 3; // (id lang math)
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int[][] score = new int[student][subject];
for (int i = 0;i < student; i++) {
int[] person = new int[subject];
for (int j = 0; j < subject; j++) {
String prompt = new String();
if (j == 0) { prompt = "id ? "; }
else if (j == 1) { prompt = "lang ? "; }
else if (j == 2) { prompt = "math ? "; }
else { System.exit(1); }
System.out.print(prompt);
score[i][j] = Integer.parseInt(in.readLine());
}
}
System.out.println("Before:");
for (int i = 0; i < student; i++) {
for (int j = 0; j < subject; j++) {
System.out.print(score[i][j]);
if (j != subject - 1) { System.out.print(" "); }
}
System.out.println();
}
// insert sort
// via (c) 2003 Okumura, "Algorithm Encyclopedia by Java", Tokyo, Japan.
for (int i = 1; i < student; i++) {
int[] save = score[i];
int save_point = save[1] + save[2];
int j = i - 1;
for ( ; j >= 0; j--) {
int[] compare = score[j];
int compare_point = compare[1] + compare[2];
if (compare_point >= save_point) { break; }
else { score[j + 1] = score[j]; }
}
score[j + 1] = save;
}
// via end.
System.out.println("After:");
for (int i = 0; i < student; i++) {
System.out.print(score[i][0]);
if (i <= student - 1) { System.out.print(" "); }
}
System.out.println();
}
}
    • good
    • 0

http://oshiete.goo.ne.jp/qa/8293186.html
こちらで、ほぼ正解という回答もらってますよね?

> 合計が高いもの順にがめんに出力なのに合計が低いじゅんになってますよ??勘違いだったらすいません

だったら、出力順を逆にすればいいだけじゃないですか。
順番を逆にするのは
http://oshiete.goo.ne.jp/qa/8293175.html
でやってますよね?

あるいは
// via end.
System.out.println("out:");
for (int i = 0; i < student; i++) {


学生0
学生1
..
学生student-1

と出力した結果が逆順になっているのなら

学生student-1
学生student-2
..
学生0

と反転させて出力すればいいだけです。

「簡単」ということなら、sortとかreverseとか使った方がよっぽど「簡単」です。
見ただけで「並び換えてるな」「逆順にしてるな」ってわかるんですから
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!