<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var n=52
var ar = new Array();
var d1=[1,2,3,4,5,6,7,8,9,10,"J","Q","K"];
var d2=[9824,9827,9829,9830];for (var i=0;i<4;i++){d2[i]=String.fromCharCode(d2[i])}
function compare(arg1,arg2){
return arg1[1]-arg2[1];
}for (var i=0;i<n;i++){
ar[i] = [d1[parseInt(i/4)]+d2[i%4],Math.random()];
}
ar.sort(compare);
for (var i=0;i<n;i++){
document.write(ar[i][0]+" &nbsp; ");
}
//-->
</SCRIPT>
</BODY>

解决方案 »

  1.   

    <BODY>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var ar = new Array();
    var d1=[1,2,3,4,5,6,7,8,9,10,"J","Q","K"];
    var d2=unescape("%u2660%u2663%u2665%u2666").split("");for (var i=0;i<52;i++){
    ar[i] = (d1[parseInt(i/4)]+d2[i%4]).fontcolor((i%4<2)?"black":"red");
    }
    ar.sort(new Function("return .5-Math.random()")).sort(new Function("return .5-Math.random()"));
    for (var i=0;i<52;i++){
    document.write(ar[i]+" &nbsp; ");
    }
    //-->
    </SCRIPT>
    </BODY>
      

  2.   

    是不是要达到洗牌的效果?
    52个元素
    A是一个0-51之间的随机数
    B是一个0-51之间的不同于A的随机数
    T是个中间变量A,B对应着数组的序号,
    把A,B数组序号对应的元素值利用中间变量相互交换一下不就完成了洗牌的效果了吧!
      

  3.   

    不对。
    你说的a中的随机数允许重复吗?
    如果不重复,那么怎么生成A呢?只要能随机生成不重复的a中的元素,那牌已经洗好啦。
    如果可以重复,那a又有什么用呢?
      

  4.   

    就是個排序問題try:function randomSort(firstE, secoundE)
    {
     return Math.round(Math.random())+2-1;
    }
    your_Card_array.sort(randomSort);
      

  5.   

    c366oem(99%Single) :
    楼主说的正是这个意思。不过你的A数组要怎么生成呢?wsj(骆驼) :回答问题前要自己先试过。试试:
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function randomSort(firstE, secoundE)
    {
     return Math.round(Math.random())+2-1;
    }
    for (var i=0;i<10;i++)
    alert([1,2,3,4,5,6,7,8,9,0].sort(randomSort))
    </SCRIPT>
    知道你的问题出在哪里了吗?
      

  6.   

    to  emu(ston) 1)
    我回答問題給的code一般都沒有試過 :P
    (除非我自己不肯定)
    2)
    您的code,不知道您想告訴我什麽
    3)
    關於隨即返回一個 0或-1或1 的算法
    每個人都可以寫出很多種
    我這裡對這個問題外的問題,只是舉個簡單例子PS.如果您有興趣,可以寫n個隨機算法,貼在這裡
    讓大家包括我 學習學習
      

  7.   

    忘了道謝了:我讓樓主 "try"謝謝,您幫大家"try"
      

  8.   

    很简单呀,将以下步骤循环 n 次,n你自己定。a=产生一个52以内的随机数字。
    b=产生一个52以内的随机数字。交换数组第a个元素和第b个元素的值。
      

  9.   

    to wsj(骆驼) :
    -----------------------------------
    1)
    我回答問題給的code一般都沒有試過 :P
    (除非我自己不肯定)
    -----------------------------------
    这样不好。自己错了不要紧,教错了别人就不大好了。佛经中说有个人说错了一句佛法,被罚做五百世狐仙。----------------------------------
    2)
    您的code,不知道您想告訴我什麽
    ----------------------------------
    我只是想告诉你错在哪里。----------------------------------
    3)
    關於隨即返回一個 0或-1或1 的算法......
    ----------------------------------
    你以为你函数的返回值是你所希望的吗?
      

  10.   

    to snakeli(&#26446;&#20339;) :如果很简单,你为什么不做一个出来,并试试对不对呢?
      

  11.   

    讨论一下,用snakeli(&#26446;&#20339;)的方法,n应该为多少才合理呢?
      

  12.   

    1)
    鄙人認爲對於該問題的解決sort是最好辦法
    (竊以爲可以加入精華貼)2)
    對於引生出的隨機算法的問題,這裡不做討論
    可以另開貼3)
    在您的督促下,我看了一下代碼
    確實有個小錯誤:*寫錯成了+Math.round(Math.random())*2-1;
    (看來還真有拿來就用,不動腦子的人)
    我就一樂,談何佛法,閣下真當真
    感謝您的意見,不過我將一如既往:只給思路,不給代碼
      

  13.   

    明兒就過年了我都為我們這些在大掃除的間隙,還到CSDN逛逛的CSDNer的精神感動
    祝大家新年快樂,吉祥如意也呼籲,CSDN按網絡慣例,給過節期間,堅持在“崗位”上的支持者們
    一點禮物: 每人(今天到年初三登陸的)加專家分(=熱情分)1000! 哈哈同樂!同樂
      

  14.   

    我看了一下您的算法原來也用的是sort
    嗨!眼花,眼花。倒是我多舌了
      

  15.   

    不過以後您要是真當真聽聽 這個意見: 回复人: diozhu(diozhu) ( ) 信誉:100  2003-01-29 10:16:00  得分:0 
     
     
      能不能带点注释,看起来挺困难,谢了
      
     
    Top 
     
      

  16.   

    比较一下:function compare (a1,a2){
    return Math.round(Math.random())*2-1;
    }function random1(ar){
    return ar.concat().sort(compare);
    }function random2(ar){
    return ar.concat().sort(compare).sort(compare);
    }
    function compare2(arg1,arg2){
    return arg1[1]-arg2[1];
    }
    function random3(ar){
    var r = new Array(ar.length)
    for (var i=0;i<ar.length;i++)
    r[i] = [ar[i],Math.random()];
    r.sort(compare2);
    for (var i=0;i<r.length;i++)
    r[i] = r[i][0];
    return r;
    }var src=[0,1,2,3,4,5,6,7,8,9];
    document.write(random1(src)+"<br>");
    document.write(random2(src)+"<br>");
    document.write(random3(src)+"<br>");
      

  17.   

    请教:能不能详细解释一下sort是如何使用它的那个函数参数的
    感觉使用wsj的方法,结果1出现在最后的情况出现的次数较多<SCRIPT LANGUAGE="JavaScript">
    function randomSort(firstE, secoundE)
    {
     return Math.round(Math.random())+2-1;
    }
    for (var i=0;i<20;i++)
    alert([1,2,3,4,5,6,7,8,9,0].sort(randomSort))
    </SCRIPT>
    -------------------------------------语法
    arrayobj.sort(sortfunction) 
    sortfunction 参数是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。 说明
    sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。 
    如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一: 负值,如果所传递的第一个参数比第二个参数小。 
    零,如果两个参数相等。 
    正值,如果第一个参数比第二个参数大。 
      

  18.   

    JK_10000(JK1)一语中的:
    ----------------------------------------------------------
    感觉使用wsj的方法,结果1出现在最后的情况出现的次数较多
    ----------------------------------------------------------我以前也是使用那个方法,被秋水指出了这个问题后才改进的。
      

  19.   

    ---------------------------------------------------
    请教:能不能详细解释一下sort是如何使用它的那个函数参数的
    ---------------------------------------------------
    是这么比较的:function randomSort(firstE, secoundE)
    {
     document.write(firstE+" compare with "+secoundE+"<br>");
     return Math.round(Math.random())*2-1;
    }
    [1,2,3,4,5,6,7,8,9,0].sort(randomSort);