- 締切済み
JAVAについて(配列)
現在JAVAの配列を勉強しています^^ 問題集の勉強をしてて、気になる事があったので、どなたかわかる方宜しくお願いします☆ 要素数11個の配列があります。 10個には同じ数字が入っています。 1個だけ他の数字より大きい数字が入っています。 ただし、配列の何番目に、その数字が入っているのかは解りません。 それが、配列の何番目に入っているのかを出力するプログラムを作成してください。 ※for 文使用しないパターン ヒント: ここに天秤と、 11個の重りがあります。 1つだけ他のより重いです。 他はみんな、同じ重さです。 (2分木) 私が考えるには、全体の平均値を比較していく考えなのですが、他によい方法があれば宜しくお願い致します。 ちなみに今作成途中のもの↓ 実行しても表示されません・・・なぜかわかりません・・・ わかる方・・・助けて下さい^^ public static void main(String[] args) { int[]a = new int[11]; a[0] =1; a[1] =1; a[2] =1; a[3] =1; a[4] =2; a[5] =1; a[6] =1; a[7] =1; a[8] =1; a[9] =1; a[10] =1; int max = a[0]; int sum = a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]; int avg = sum/11; if(avg<a[0]) System.out.println("最大値は"+max+"番目"); } }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 1qaz_2wsx
- ベストアンサー率100% (3/3)
#2です。 すいません。よく考えたら、2回ではなく3回ですね。
- 1qaz_2wsx
- ベストアンサー率100% (3/3)
これは、JAVAの問題ではなく考え方の問題だと思うのですが、、、 ちょっと興味があったので、回答します。 #1さんより、if文を少なくする方法があります。 ヒントは天秤で一度に量ることができる対象は いくつあるかをよく考えることです。 対象が11個の場合、天秤を2回(if分を2回)で答えが出ます。
- Gizensha
- ベストアンサー率34% (207/608)
課題っぽいので考え方のヒントだけ。 a[0]~a[5]までの合計とa[6]~a[10]までの合計を比較。 前者が大きければa[0]~a[2]とa[3]~a[6]の合計を比較。 前者が大きければa[0]とa[1]を比較。 前者が大きければ 0 が答え。 後者が大きければ 1 が答え。 どちらでも無いなら 2 が答え。 <以下省略> 処理対象を半分ずつに分けていけば二分木の処理にならないかな? # for文を使わず while使うのは反則かな :)
お礼
なるほど~!! 二分木は調べたのですが、いまいち理解出来てなくて・・・ チャレンジしてみます!! ちなみにwhileは試しました。