彩票算法

福利彩票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;
 }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值