意外と苦戦した問題を…
TopCoderとはあんま関係ないんですが、苦戦した問題があったので…
演習6−9
要素型がintがたである配列を作り。全要素を1〜10の乱数で埋め尽くすプログラムを作成せよ。要素数はキーボードから読み込むこと。
演習6−11(コレ)
異なる要素が同じ値を持つ事のないように演習6−9のプログラムを改良せよ。ただし配列の要素数は10以下であるとする。
はい。6−11です。
余裕かな?と思いきや、普通にかぶったり、無限ループにはまらせてしまったりで大変だった(*_*;
ちょっとわかりました?
正解(正しく動いたのはコチラ)
import java.util.Scanner; import java.util.Random; class solvevi11 { public static void main(String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); int e; do { System.out.print("Number of Elements: "); e = stdIn.nextInt(); } while(e > 10); int[] list = new int[e]; int i, j; for (i = 0; i < e; i++) { list[i] = rand.nextInt(10) + 1; if (i == 0) continue; do { j = 0; while (j < i) { if (list[i] != list[j]){ j++; continue;} else if (list[i] == list[j]){ break; } } if (j == i) break; list[i] = rand.nextInt(10) + 1; } while (true); } for (int n : list) System.out.print(n+" "); System.out.println(); } }
だいぶ試行錯誤で完成した。
do-whileの中もfor文でやってしまうとちょっと狂う。多分。
はぁ〜今日のSRM(明日か)大丈夫かな????