福利彩票33选6 福利彩票的模拟:从1~33个数中选取6个数作为一组,即为一张彩票;中奖号码也是类似这样的一组数,每一张彩票的号码和中奖号码中的6个号进行比较,相同号码的个数,作为评奖的依据,相同号码的个数越多,中奖级别越高,奖金越高。要求: 1. 从键盘输入或利用随机数自动生成的一组中奖号码。 2. 由系统随机生成若干张(50、100、500等)彩票,与给定的中奖号码进行比较,统计这些彩票的中奖情况(见表2-1)。 3. 中奖规定:一等奖猜对6个号码,二等奖猜对5个号码,三等奖猜对4个号码,四等奖猜对3个号码,五等奖猜对2个号码 提示: 1. 此题为线性表和排序算法的综合应用。 2. 可用顺序表存储备选号码。 3. 对中奖号码按大到小进行排序,不要求对每组彩票中的号码进行排序.
下面是源代码:
class RandObj
{
//用于存储号码数组得类
private int[] randobj;
public int[] getRandobj()
{
return randobj;
}
public void setRandobj(int[] ra)
{
this.randobj = ra;
}
}
import java.util.*;
public class Rand
{
//产生一个随机数组
public static int[] random(int sub)
{
int[] returnarray = new int[sub];
for(int i=0;i<sub;i++)
{
returnarray[i]=getRand();
for(int j=0;j<i;j++)
{
if(returnarray[i]==returnarray[j])
{
returnarray[i]=getRand();
j=-1;
}
}
}
sort(returnarray);
return returnarray;
}
public static boolean isExist(int[] value)
{
boolean bl = false;
for(int i=0;i<value.length;i++)
{
for(int j=i+1;j<value.length;j++)
{
if(value[i]==value[j])
{
bl = true;
break;
}
}
}
return bl;
}
//从1-33中随机选择一个数
public static int getRand()
{
int a = (int)Math.round(33*Math.random())+1;
if(a>33)a = 33;
if(a<1)a = 1;
return a;
}
//对数组进行排序
public static void sort(int[] numarr)
{
int len = numarr.length;
for(int i = 0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(numarr[j]<numarr[i])
{
int change = numarr[i];
numarr[i] = numarr[j];
numarr[j] = change;
}
}
}
}
public static ArrayList getAllRandom(int num,int sub)
{
ArrayList list = new ArrayList();
for(int i=0;i<num;i++)
{
RandObj obj = new RandObj();
obj.setRandobj(random(sub));
list.add(obj);
}
return list;
}
public static void main(String[] a)
{
int[] real = random(6);
String str = "";
for(int i = 0;i<real.length;i++)
{
str = str + Integer.toString(real[i])+" ";
}
System.out.println("中奖号码为"+str);
System.out.println("-------------");
ArrayList list = getAllRandom(100,6);
Iterator iter = list.iterator();
int j = 1;
while(iter.hasNext())
{
RandObj obj = (RandObj)iter.next();
int[] b = obj.getRandobj();
str = "";
for(int i = 0;i<b.length;i++)
{
str = str + Integer.toString(b[i])+" ";
}
if(isExist(b)){System.out.println("有重复值");}
System.out.println("第"+(j++)+"个号码为"+str);
}
/*System.out.println("-------------");
int[] zjnum = Rule.zj(list,real);
for(j=0;j<zjnum.length;j++)
{
System.out.println(j+"等奖注数为"+zjnum[j]);
}*/
}
}
import java.util.*;
class Rule
{
//判断中奖号码个数
public static int compare(int[] choose,int[] real)
{
int samevalue = 0;
int chooselen = choose.length;
int reallen = real.length;
for(int i=0;i<chooselen;i++)
{
for(int j=0;j<reallen;j++)
{
if(choose[i]==real[j])samevalue++;
}
}
return samevalue;
}
//
public static int[] zj(ArrayList list,int[] real)
{
int[] returnvalue = new int[6];
Iterator iter = list.iterator();
while(iter.hasNext())
{
RandObj obj = (RandObj)iter.next();
int[] b = obj.getRandobj();
int a = jb(compare(b,real));
returnvalue[a]++;
}
return returnvalue;
}
//根据中奖号码个数确定中奖级别
public static int jb(int value)
{
int r = 0;
if(value==6) r = 1;
if(value==5) r = 2;
if(value==4) r = 3;
if(value==3) r = 4;
if(value==2) r = 5;
return r;
}
}