• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Dawnz
博客园    首页    新随笔    联系   管理    订阅  订阅

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 谢谢大叔……

posted @ 2012-11-15 23:28  Dawnz  阅读(285)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3