题目:若干个不重复数,打乱顺序输出

本文介绍了一种使用JavaScript实现的算法,能够将一组不重复的数字打乱顺序输出。此外,还提供了一种更高效的实现方式,通过随机位置插入元素来达到相同的效果。
  上次在跟一个朋友吃饭的时候,他说起他那个时候的一个面试题,闲来无事,顺手做了下。
  题目是:若干个不重复数,打乱顺序输出,用javascript实现
  实现如下:
 
       window.onload  =   function  () {
            
//  1到100,打乱顺序输出
            outputOne();
            document.write(
" <br /><br /> " );

            
//  自定义的列表,打乱顺序输出
            outputTwo();
        };

        
function  outputOne() {
            
var  count  =   100 ;
            
var  size  =   10 ;

            
for  ( var  i  =   1 ; i  <=  count; i ++ ) {
                document.write(i 
+   "    " );
                
if  (i  >   1   &  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };

            document.write(
" <br /><br /> " );

            
var  list  =  [];
            
var  number;
            
var  listCount;

            
while  (list.length  <  count) {
                listCount 
=   0 ;
                number 
=  Math.floor(Math.random()  *  count)  +   1 ;
                
for  ( var  i  =   0 ; i  <  list.length; i ++ ) {
                    
if  (number  !=  list[i]) {
                        listCount
++ ;
                    };
                };

                
if  (listCount  ==  list.length) {
                    list.push(number);
                };
            };

            
for  ( var  i  =   1 ; i  <=  list.length; i ++ ) {
                document.write(list[i 
-   1 +   "   " );
                
if  (i  >   1   &&  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };
        };

        
function  outputTwo() {
            
var  size  =   10 ;
            
var  list  =  [ 1 2 3 4 5 10 20 30 50 100 200 300 500 1000 6 7 8 9 ];
            
var  newList  =  [];

            
for  ( var  i  =   1 ; i  <=  list.length; i ++ ) {
                document.write(list[i 
-   1 +   "    " );
                
if  (i  >   1   &  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };

            document.write(
" <br /><br /> " );

            
var  index;
            
var  listCount;

            
while  (newList.length  <  list.length) {
                listCount 
=   0 ;
                index 
=  Math.floor(Math.random()  *  list.length);
                
for  ( var  i  =   0 ; i  <  newList.length; i ++ ) {
                    
if  (list[index]  !=  newList[i]) {
                        listCount
++ ;
                    };
                };

                
if  (listCount  ==  newList.length) {
                    newList.push(list[index]);
                };
            };

            
for  ( var  i  =   1 ; i  <=  newList.length; i ++ ) {
                document.write(newList[i 
-   1 +   "   " );
                
if  (i  >   1   &&  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };
        };

 

感谢 明天.Net(小彭) 同学提供一种更高明的思路:

利用往新的数组中随意位置依次插入新的元素的方式得到一个随机排列,即我们需要的结果

 

        function  outputThree() {
            
var  size  =   10 ;
            
var  list  =  [ 1 2 3 4 5 10 20 30 50 100 200 300 500 1000 6 7 8 9 ];
            
var  outlist  =  [];

            
for  ( var  i  =   1 ; i  <=  list.length; i ++ ) {
                document.write(list[i 
-   1 +   "    " );
                
if  (i  >   1   &  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };

            document.write(
" <br /><br /> " );

            
for  ( var  i  =   0 ; i  <  list.length; i ++ ) {
                
if  (i  ==   0 ) {
                    outlist.push(list[i]); 
                } 
else  {
                    
var  index  =  Math.floor(Math.random()  *  (outlist.length  +   1 ));
                    outlist.splice(index, 
0 , list[i]);
                };
            };

            
for  ( var  i  =   1 ; i  <=  outlist.length; i ++ ) {
                document.write(outlist[i 
-   1 +   "   " );
                
if  (i  >   1   &&  i  %  size  ==   0 ) {
                    document.write(
" <br /> " );
                };
            };
        };

 

转载于:https://www.cnblogs.com/myself/archive/2011/02/25/1964837.html

本关任务:编写一段能生成若干个车牌号的代码 在本中,根据如下步骤随机生成若干个车牌号。 分行输入随机种子以及车牌号数量n,生成包含n个车牌号的列表并输出。 车牌号规则: 以'鄂A-'或'鄂W-'开头 长度总共为8位,后5位中包含最多2个字母字符,其余为数字 为避免数字与字母混淆,如'1'与'I','0'与'O',车牌号中不应出现字母'I'与'O' 生成车牌号步骤: 定义一个函数完成下列步骤 随机生成0~2之间的随机整数t,代表车牌中字母个数---random.randint() 在大写字母字符串string.ascii_uppercase(需要删除'I'与'O')中随机抽取t个字母---random.choices(),权重相同 在数字字符串string.digits中随机抽取5-t个数字字符---random.choices(),权重相同 将生成的随机字母串与数字字符串连接,字母字符串在前 对连接后的列表随机打乱---random.shuffle() 将打乱后的列表中字符连接为字符串s 随机在列表['鄂A-','鄂W-']中随机抽取车牌前三位---random.choice() 将选取的车牌前三位与s连接得到车牌号并返回 为保证评测结果相同,代码中必须严格按照上述步骤顺序及使用指定随机数函数。 知识点 random.choices(pop, weights, k) pop为样本序列 weight为从pop中随机抽取时对应的权重列表,如果省略,则默认为序列中每个样本被抽取的概率相同 k为随机抽取的样本数量 如: random.choices([34,12,47,51,-1], k = 3) 代表从[34,12,47,51,-1]列表中,按相同权重,随机抽取三个样本数据 random.choices([34,12,47,51,-1], weights = [1,1,3,1,1], k = 3) 代表从[34,12,47,51,-1]列表中,按权重列表weight,随机抽取三个样本数据 测试说明 平台会对你编写的代码进行测试: 测试输入: 5 20 预期输出: ['鄂A-958G7', '鄂W-67161', '鄂W-94731', '鄂A-05W5H', '鄂W-7Y18Y', '鄂A-75121', '鄂A-1107U', '鄂A-1530D
12-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值