1115 彩票问题。

14号的时候老湿留了两个题目,一个是二分法,一个是彩票问题。

彩票问题有两个条件:36选7的模式,随机出来7个1~36的数字,不能有重复。

题干看似很短,但是实现起来的确需要懂点脑子,一开始我只是单纯的感觉用一个数组随机生成7个数字,然后划定范围不就OK了么,其实不然,这道题远没有我们想象中的那么简单,首先我讲一下思路。

首先用一个数列存储1~36这三十六个数字,然后用一个random变量随机出0~35(数列的下标)的数字,然后把位于这个下标的数字提取出来,作为另一个长度为7的数列的第一个下标(0),同时,把被提取出来的数字放到该数列的最后一位,然后将random变量的随机数字-1.

so let's work on it!

int[] num = new int[36];//设置一个长度为36的数列。

for(int i =1;i<=num.length;i++)

{

  num[i-1]=i;//将1~36赋值给数列。

}

int[] cho = new int[7];//最后我们选择的7个数所组成的数列。

random rand = new random();//用来生成随机数以提取随机下标的random变量。

int max = 36;//一开始rand所取值的最大值。

for(int i =1;i<=cho.length;i++)//提取7个数字,循环七次。

{

  int temp = rand.next(max);//在这里n不会等于35,所以可以用作num的下标使用。

  cho[i-1]=num[temp];  

  num[temp]=num[max-1];//注意注意,在这个地方max就需要-1了,因为这里表示的是下标,不再是范围~!

  max--;//每次循环结束以后,max-1表示不再随机出已经被交换的选择过的数字,从而达到不重复的效果!

}

//这样这道题的思路已经一目了然,剩下的就是做一下排序然后依次打印出来了

//接下来是冒泡排序,在上一篇文章我有提到过,现在再来熟悉一遍。

for(int i =1;i<=cho.length-1;i++)

{

  for(int j =1;j<=cho.length-i;j++)

  {

    if(cho[j-1]>cho[j])

    {

      int temp = cho[j];

      cho[j]=cho[j-1];

      cho[j-1]=temp;

    }

  }

}

//这样我们就得到的规律的数列,然后我们把他打印出来,就可以去买彩票了!(不中不怪我,中奖分一半!)

for(int i =1;i<=cho.length;i++)

{

  console.write("{0}\t",cho[i-1]);//一定不要忘了-1~!!!

}

大功告成,已经接近12点了,不过大晚上整理一遍思路应该会记得更清楚 嘿嘿~以后的日子更要努力了~

PS:彩票的做法不止一种,可能还有更简洁的方法,不过这个办法是大叔手把手教的T T 谢谢大叔……

转载于:https://www.cnblogs.com/Dawn-z/archive/2012/11/15/2772486.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值