首页 新闻 会员 周边 捐助

随机26个字母,不能重复,得到需要多少次才能输出26个字母

0
[已解决问题] 解决于 2018-08-04 19:40

import java.util.Random;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Collection;
import java.util.HashSet;

/*

大神看下我的代码有什么错误

*/

public class zimu {
public static void main(String[] args) {
 Random r=new Random();
 HashSet arr=new HashSet();
 int g=0;
 Map<Integer,Character>map=new HashMap<Integer,Character>();
 for (int i = 0; i<26;i++) {
  int temp=r.nextInt(26);
  char x=(char)((temp%26)+65);
  if(arr.contains(x)==true)
  {
  i=0;
  g++;
  arr.clear();
  }else
  {arr.add(x); map.put(i,x);
  }
 }
 Set<Integer> keys=map.keySet();
 for (Integer i : keys) {
    System.out.println(i+"--"+map.get(i));
 } 
 System.out.println(g+"次");
}
}

寒兔的主页 寒兔 | 初学一级 | 园豆:183
提问于:2018-08-01 10:30

你这样我不想看

暴躁的三胖 6年前

记得下次用插入代码按钮试试哟。。。 !~~~

blurs 6年前

我是要得到那个次数,不是要输出26个不同的字母

寒兔 6年前
< >
分享
最佳答案
0

你不觉得这个多少次很依赖运气吗  运气好它一次不重复的给你输出来,运气不好要穷尽所有可能结果才能完全输出,额,不对,万一它就一直随机那几个已输入的几个字母呢? 比如已经输出A-Y了,最后一个Z它死活没有随机到,那么不就会一直执行吗   我没看代码,我是看标题评论的  (*/ω\*)

奖励园豆:5
顾星河 | 大侠五级 |园豆:7281 | 2018-08-01 11:17

可是他说了不能重复了啊,也就是说会有去重的判断,那当然就是26次输出26个字母啦~

山抹微云君^^ | 园豆:474 (菜鸟二级) | 2018-08-01 11:21

@暴躁的三胖:     你确定26次就能随机出26个不同字母??     if(重复){重新随机;随机次数++;}  随机出重复的概率是很高的,这个无法避免,一随机出重复的,势必重新随机,同时随机次数会++ 那么随机次数势必大于26次。     26次是最小的次数,基本就是不可能的,哪有随机出26个数不带一个重的,那运气太好了吧   除非说重复了以后不再重新随机,但是不再重新随机它怎么进行下一步?   不能重复实际在代码里的意思是,随机出重复以后重新随机新的字母,这不叫去重,这叫重复则不输出,并记录一次随机次数 

顾星河 | 园豆:7281 (大侠五级) | 2018-08-01 11:33
其他回答(3)
0

如果你是想做一个随机字母的机智的话。。
1. 可以试着选设定出一个字母表数组。 然后 一个一个从里面取出字母  数组取完了  为空了  字母表正好筹齐, 一次也没浪费。。  哈哈哈  虽然没什么卵用

2. 百分获取法   随机0 - 1的数组 然后转化为 百分比  然后 用
x = (26{字母总字数}) - x{还存在没有被获取的字数})^2 * 百分比{随机出来的百分比} - 1

然后取 x 的自然数  当做下标 从数组里面获取

这样 次数就正好是字母总数了  也算蛮快的算法了吧。。  

blurs | 园豆:660 (小虾三级) | 2018-08-01 11:26

简直就像是狂欢一样。。。。  

比如  你随机是  0.88 

那么就是 88%

如果你还没取那么 算法就是

(26 - 0) * (26 - 0) / 26 * 0.88  - 1

 

支持(0) 反对(0) blurs | 园豆:660 (小虾三级) | 2018-08-01 11:32
0

百度下洗牌算法吧.

而且优化就算没人教.自己也改能想到吧?

吴瑞祥 | 园豆:29449 (高人七级) | 2018-08-01 11:43
0

最简单的就是先给定26个字母去shuffle,每次随机挑出一个数字,和最后一个元素置换,再从0-n-1的序列里随机挑选。

算法复杂度,一个循环,每次循环选择一个随机数,在做一次置换,N*随机数生成速度,空间复杂度就是原数组操作

waterxi | 园豆:204 (菜鸟二级) | 2018-08-06 09:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册