• ベストアンサー

ロジックが思い浮かびません・・・。

大変お世話になります。 昨日からずっと悩んでいて、ロジックが思い浮かびません・・・。 下記のような処理を行うには? int point [] = {90,90,80,70,70}; これを、 1位90 1位90 3位80 4位70 4位70 と表示させたいのですが、同点の時の処理をどうしたらいいか・・・。 誰かわかる方いらっしゃいますか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.3

ソートするプログラムは参考書等で沢山見つかるので端折ります。 降順に並べ終えた後、以下の様な感じでいいと思います。 i = j = 0 ; while ( j < point.length ){ System.out.println((i+1)+"位"+point[j++]); if ( point[i] > point[j] ) i = j ; }

kazuoao
質問者

お礼

ちょっと改造したらそのまま使えました! どうもありがとうございます!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

(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

kazuoao
質問者

お礼

すみません、VBAは読めないもので・・・ どうもありがとうございました!

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

1.pointを降順にソートします。 2.pointの先頭の要素から順に番号を振ります。 3.但し、その要素と1つ前の要素の値が同じ場合は、   1つ前の要素に割り振った番号と同じものを採用します。   但し、要素の先頭の場合は、無条件に1を割り振ります。 上記のやり方でどうでしょうか。

kazuoao
質問者

お礼

まさにその通りですね! どうもありがとうございました!

  • penpen7
  • ベストアンサー率33% (25/74)
回答No.1

まずは、大小得点を並べて出力するプログラムを作成してから、得点が同一だった場合のIF文を追加してやれば良いのではないでしょうか?

kazuoao
質問者

お礼

たしかにその方法もありますね! どうもありがとうございました!

関連するQ&A