- ベストアンサー
ロジックが思い浮かびません・・・。
大変お世話になります。 昨日からずっと悩んでいて、ロジックが思い浮かびません・・・。 下記のような処理を行うには? int point [] = {90,90,80,70,70}; これを、 1位90 1位90 3位80 4位70 4位70 と表示させたいのですが、同点の時の処理をどうしたらいいか・・・。 誰かわかる方いらっしゃいますか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ソートするプログラムは参考書等で沢山見つかるので端折ります。 降順に並べ終えた後、以下の様な感じでいいと思います。 i = j = 0 ; while ( j < point.length ){ System.out.println((i+1)+"位"+point[j++]); if ( point[i] > point[j] ) i = j ; }
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
(1)まず数値をソート(本質問では降順らしい) (2)手早いのでエクセルVBAで確認。JAVAにすぐ置きかえられるので参考にしてください。 Sub aaa() Dim b(8) '---ソート後原データ a = Array(90, 90, 80, 70, 70, 60, 30, 30, 10) m = a(0) j = 1 '同順位用順番 For i = 0 To UBound(a) 'iは配列要素 If m = a(i) Then '直前と同じ値か b(i) = j Else b(i) = i + 1 '順位は0でなく1から数えるので+1 m = a(i) j = i + 1 '本来の順番に追い付く End If Next '-----確認 s = "" For i = 0 To UBound(a) s = s & b(i) & " " Next i MsgBox s End Sub
お礼
すみません、VBAは読めないもので・・・ どうもありがとうございました!
- tatsu99
- ベストアンサー率52% (391/751)
1.pointを降順にソートします。 2.pointの先頭の要素から順に番号を振ります。 3.但し、その要素と1つ前の要素の値が同じ場合は、 1つ前の要素に割り振った番号と同じものを採用します。 但し、要素の先頭の場合は、無条件に1を割り振ります。 上記のやり方でどうでしょうか。
お礼
まさにその通りですね! どうもありがとうございました!
- penpen7
- ベストアンサー率33% (25/74)
まずは、大小得点を並べて出力するプログラムを作成してから、得点が同一だった場合のIF文を追加してやれば良いのではないでしょうか?
お礼
たしかにその方法もありますね! どうもありがとうございました!
お礼
ちょっと改造したらそのまま使えました! どうもありがとうございます!