夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

意外と苦戦した問題を…

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(明日か)大丈夫かな????