Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Random;
- public class Main {
- static float _a = (float) 0.66;
- static int max_arr = 10000;
- public static void main(String[] args) {
- Random rnd = new Random();
- float x = rnd.nextFloat();
- float y = rnd.nextFloat();
- for (int i = 0; i < max_arr; i++) {
- method_reject(x, y);
- }
- repeat(10);
- no_repeat(10);
- }
- static float _y(float x) {
- float y;
- if (x >= 0.0 && x <= 1.0) {
- y = _a * x;
- } else if (x > 1.0 && x < 2.0) {
- y = _a;
- } else {
- y = 0;
- }
- return y;
- }
- static void method_reject(float x1, float x2) {
- float a = 0, b = 2;
- float c = (float) 0.66;
- Random rnd = new Random();
- do {
- x1 = rnd.nextFloat();
- x2 = rnd.nextFloat();
- } while (_y(a + (b - a) * x1) < c * x2);
- x2 *= c;
- x1 = a + (b - a) * x1;
- }
- static void repeat(int generated_numbers) {
- float residue_chance = 1, chance;
- Random rnd = new Random();
- float chance_hit[] = new float[generated_numbers];
- int hit[] = new int[generated_numbers];
- for(int number = 0; number < generated_numbers - 1; number++) {
- chance_hit[number] = rnd.nextFloat();
- residue_chance -= chance_hit[number];
- }
- chance_hit[generated_numbers - 1] = residue_chance;
- for(int i = 0; i < max_arr; i++) {
- chance = rnd.nextFloat();
- float sum = 0;
- for (int j = 0; j < generated_numbers; j++) {
- sum += chance_hit[j];
- if (chance < sum) {
- ++hit[j];
- break;
- }
- }
- }
- for(int number = 0; number < generated_numbers; number++) {
- System.out.printf( "%d\t%.4f\t%d\n", number, chance_hit[number] * max_arr, hit[number]);
- }
- }
- static void no_repeat(int generated_numbers) {
- ArrayList<Integer> nums, temp = new ArrayList<Integer>();
- Random rnd = new Random();
- int it, k = 3 * generated_numbers / 4;
- int hit[] = new int[generated_numbers];
- int part = max_arr / k + 1;
- float p;
- for(int number = 0; number < generated_numbers; number++) {
- temp.add(number);
- }
- for(int j = 0; j < part; j++) {
- nums = temp;
- if (j == part - 1) k = max_arr % k;
- for(int i = 0; i < k; i++) {
- p = (float) (1.0 / (generated_numbers - i));
- it = 3;
- ++hit[nums.get(it)];
- }
- }
- for(int number = 0; number < generated_numbers; number++) {
- System.out.printf("%d\t%d\n", number, hit[number]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement