package com.bean;
public class Prize {
private int dial[][] = new int[100][100];
public void valuation(float[] probability){
int prize = probability.length;
int[] num = new int[prize];
float prizeDial = 0;
for(int i = 0 ; i < prize ; i++ ){
prizeDial += probability[i];
num[i] = (int)(probability[i]*100);
}
System.out.println("总的中奖率"+prizeDial);
for (int i = 0; i < num.length; i++) {
System.out.println("每一奖项分布多少次"+num[i]);
}
for(int i = 0 ; i < 100 ; i++){
for(int j = 0 ; j < 100 ; j++){
if( Math.random() < ( prizeDial/100 ) ){
int v = randoms(prize);
if(num[v-1] > 0){
num[v-1]--;
dial[i][j] = v;
}else{
dial[i][j] = 0;
}
}else{
dial[i][j] = 0;
}
}
}
int a = 0;
for(int i = 0 ; i < prize ; i++ ){
while(num[i] > 0){
System.out.println(++a);
setOneDial(i+1);
num[i]--;
}
}
}
private long c = 10000;
private void setOneDial(int i){
if(c>0){
int k = (int)(Math.random()*100);
int v = (int)(Math.random()*100);
if(dial[k][v] > 0){
setOneDial(i);
}else{
dial[k][v] = i;
c--;
}
}
}
/**
* @param lt
* @return 一个小于等于 lt 的整数*/
@SuppressWarnings("unused")
private int randoms(int lt){
do{
int r = (int)(Math.random()*10);
if(r > 0 && r <= lt){
return r;
}
}while(true);
}
}
package com.bean;
public class Prize2 {
private int dial[][] = new int[100][100];
public void valuation(float[] probability){
int prize = probability.length;
int[] num = new int[prize];
float prizeDial = 0;
for(int i = 0 ; i < prize ; i++ ){
prizeDial += probability[i];
num[i] = (int)(probability[i]*100);
}
if(prizeDial > 100){
try {
throw new Exception("中奖概率不能大于100%");
} catch (Exception e) {
e.printStackTrace();
}
}
else{
for(int i = 0 ; i < prize ; i++ ){
while(num[i] > 0){
setOneDial(i+1);
num[i]--;
}
}
}
}
private long c = 10000;
private void setOneDial(int i){
if(c>0){
int k = (int)(Math.random()*100);
int v = (int)(Math.random()*100);
if(dial[k][v] > 0){
setOneDial(i);
}else{
dial[k][v] = i;
c--;
}
}
}
public void test(){
int count1 = 0;
int count2 = 0;
int count3 = 0;
int count4 = 0;
int count5 = 0;
int count6 = 0;
for(int i = 0 ; i < 100 ; i++){
for(int j = 0 ; j < 100 ; j++){
switch(dial[i][j]){
case 1: count1++; break;
case 2: count2++; break;
case 3: count3++; break;
case 4: count4++; break;
case 5: count5++; break;
case 6: count6++; break;
}
System.out.print(dial[i][j] + " ");
}
System.out.println("");
}
System.out.println("验证出现1有多少次:"+count1);
System.out.println("验证出现2有多少次:"+count2);
System.out.println("验证出现3有多少次:"+count3);
System.out.println("验证出现4有多少次:"+count4);
System.out.println("验证出现5有多少次:"+count5);
System.out.println("验证出现6有多少次:"+count6);
}
public static void main(String[] args) {
float[] probability = new float[]{ 0.1f, 10 ,30};
Prize2 p = new Prize2();
p.valuation(probability);
p.test();
}
}