n人中m人が当選するくじ
Posted feedbacks - Java
適当
1 2 3 4 5 6 | public boolean hoge(int n, int m) {
if ( n < m || n < 0 || m < 0 ) throw new IllegalArgumentException();
long seed = new java.util.Date().getTime() % n;
return seed < m;
}
|
ああ、問題読み間違え。
かならずm人が当たる必要あり。
1 2 3 4 5 6 7 8 9 10 11 12 | public boolean[] lot(int n, int m) {
if ( n < m || n < 0 || m < 0 ) throw new IllegalArgumentException();
boolean[] result = new boolean[n];
for ( int i = 0; i < n; i++ ) result[i] = i < m;
for ( int i = 0; i < n; i++) {
int rnd = (int)(Math.random() * 100) % n;
boolean tmp = result[i];
result[i] = result[rnd];
result[rnd] = tmp;
}
return result;
}
|
選ばれた人を消去して重複回避。不細工だなぁ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import java.util.List;
import java.util.ArrayList;
import java.util.Random;
public class LotGame {
public List<Integer> lot(int n, int m) {
List<Integer> result = new ArrayList<Integer>();
List<Integer> base = range(n);
Random random = new Random();
for (int i = 0; i < m; i++) {
int j = random.nextInt(base.size() - 1);
result.add(base.get(j));
base.remove(j);
}
return result;
}
private List<Integer> range(int n) {
List<Integer> result = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
result.add(i);
}
return result;
}
public static void main(String[] args) {
for (int i : new LotGame().lot(10, 5)) {
System.out.println(i);
}
}
}
|



にしお
#3360()
Rating0/0=0.00
[ reply ]