设为首页收藏本站订阅更新

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

搜索
楼主: 155120699

(转载)试试自己,看看自己的工资有多少

[复制链接]
发表于 2005-9-22 16:17:16 | 显示全部楼层

这是全组合,没有用递归,但用了一个大数组。


  1. <script>
  2. var stack = new Array("a","b","c","d","e","f","g","h","i","j","k","l");
  3. var buff = new Array();
  4. var cnt = 0;

  5. function getComb(size) {
  6.         for(var i=0;i<size;i++) {
  7.                 var len=buff.length;
  8.                 for(var j=0;j<len;j++) {
  9.                         buff.push(buff[j]+stack[i]);
  10.                         document.write(++cnt+'\t('+buff[j]+stack[i]+')<BR>');
  11.                 }
  12.                 buff.push(stack[i]);
  13.                 document.write(++cnt+'\t('+stack[i]+')<BR>');
  14.         }
  15. }
  16. getComb(stack.length);               
  17. </script>
复制代码
发表于 2005-9-22 17:08:57 | 显示全部楼层
引用内容由 Jimmyboy 发表于 2005-9-22 04:17 PM
[code]
<script>
var stack = new Array("a","b","c","d","e","f","g","h","i","j","k&quo ...



赞~
这个是“分治策略”中经典的广度优先算法,有点类似海浪的那个最优路径搜索

Jimmyboy的基本功非常扎实...
佩服 :)
发表于 2005-9-22 19:04:29 | 显示全部楼层
月影已经把数据结构用到极致了,只好来个不用数据结构的


  1. <script>
  2.     function printCombination(n)
  3.     {
  4.         var count = Math.pow(2, n);
  5.         for (var i = 0; i < count; ++i)
  6.         {
  7.             var s = "[";
  8.             for (var num = i, j = 0; num > 0; num >>= 1, ++j)
  9.             {
  10.                 if (num % 2 == 1)
  11.                 {
  12.                     s += String.fromCharCode(0x61 + j);
  13.                 }
  14.             }
  15.             document.write(s + "]<br>");
  16.         }
  17.     }

  18.     printCombination(12);
  19. </script>
复制代码
发表于 2005-9-22 19:22:32 | 显示全部楼层
楼上的强啊,用字符编码.
发表于 2005-9-22 21:13:54 | 显示全部楼层
引用内容由 七月流火 发表于 2005-9-22 07:04 PM
月影已经把数据结构用到极致了,只好来个不用数据结构的

[code]
<script>
    function printCombination(n)
    {
        var count = Math.pow(2, n);
        for (var i = 0; i < count; + ...



好思路!
用二进制位判定原理...真是厉害...
发表于 2005-9-22 21:20:25 | 显示全部楼层
这个虽然不是用严格的“数据结构”来实现的,但是基本上算是用到了经典的组合论、状态表和信息编码原理...
所以嘛...要为你的“数学感觉”一流而赞一把~ ^^
而且...通过这样的讨论,特别像41楼、43楼这样...令月影收益匪浅!

PS:说偶把数据结构用到极致可不敢当... *^_^*
充其量只能算是一种比较简单的处理方法而已
比起楼上几位巧妙灵活的思路还有很多不足之处需要学习

[ 本帖由 月影 最后编辑于 2005-9-22 21:21 ]
发表于 2005-9-23 13:50:58 | 显示全部楼层
引用内容由 七月流火 发表于 2005-9-22 07:04 PM
月影已经把数据结构用到极致了,只好来个不用数据结构的

[code]
<script>
    function printCombination(n)
    {
        var count = Math.pow(2, n);
        for (var i = 0; i < count; + ...


这个厉害,看了半天,也只是似懂非懂,只好“虽不能至,心向往之”了。:o
发表于 2005-9-23 16:02:30 | 显示全部楼层
看来真是要去看数据结构了,寒一个,学校不努力,出来受人骂!
逍遥去的方法毫无效率和算法可言!
发表于 2005-9-24 11:35:30 | 显示全部楼层
收藏先
发表于 2005-9-24 13:56:08 | 显示全部楼层

我也试试啊

我也试写了一个,还没有来得及看你们的代码呢

  1. <script>
  2. var char=['a','b','c','d','e','f','g','h','i','j','k','l']
  3. var l=0
  4. function getComb(str,i)
  5. {
  6. if(i==12)
  7. {
  8.         document.write(++l+":"+str+"<br>");
  9.         return
  10. }
  11.         for(var m=0;m<2;m++)
  12.         {
  13.                 if(m==0)
  14.                 getComb(str+char[i],i+1)
  15.                 else
  16.                 getComb(str,i+1)       
  17.         }
  18. }
  19. getComb('',0)
  20. </script>
复制代码

[ 本帖由 lint 最后编辑于 2005-9-24 13:57 ]
发表于 2005-9-24 14:05:59 | 显示全部楼层

简化了一下


  1. <Script language=JScript>
  2. var l=0
  3. function getComb(str,i)
  4. {
  5. if(i==12)
  6.         {
  7.                 document.write(++l+":"+str+"<br>");  //输出拉
  8.                 return
  9.         }
  10. getComb(str+String.fromCharCode(0x61 + i),i+1)  //输出该字符
  11. getComb(str,i+1)  //不输出该字符
  12. }
  13. getComb('',0)
  14. </Script>
复制代码

[ 本帖由 lint 最后编辑于 2005-9-24 14:14 ]
发表于 2005-10-9 15:02:35 | 显示全部楼层
这是全部的排列,包括  dcba 等,上面的很多代码,都没有考虑字母倒过来排列。
如果考虑倒过来排,我只能排到"F",再往后排 就会死机。

  1. <script>
  2. var stack = new Array("a","b","c","d","e","f");
  3. var buff = new Array();
  4. var tmpa=new Array;
  5. var count = 0;

  6. function show11(lens)
  7. {
  8.         for (i=0;i<lens;i++)
  9.         {       
  10.         buff.splice(0,buff.length)
  11.         buff.push(stack[i]);
  12.         document.write(++count);
  13.         document.write(". ");
  14.         document.write(buff[buff.length-1]);
  15.         document.write("<br>");
  16.                 for (j=0;j<buff.length;j++)
  17.                 {
  18.                         for (k=0;k<lens;k++)
  19.                         {
  20.                                 if (buff[j].indexOf(stack[k])==-1)
  21.                                 {
  22.                                         buff.push(buff[j]+stack[k]);
  23.                                         document.write(++count);
  24.                                         document.write(". ");
  25.                                         document.write(buff[buff.length-1]);
  26.                                         document.write("<br>");
  27.                                 }
  28.                         }
  29.                 }
  30.         }
  31. }
  32. show11(stack.length)
  33. </script>
复制代码
发表于 2005-10-9 15:32:15 | 显示全部楼层
<%
A="A,B,C,D,E"  
A=split(A,",")  
for  i=0 to ubound(A)  
for  J=0 to ubound(A)
   for  K=0 to ubound(A)
    Response.Write A(I)&A(J)&A(K)&"<br>"
   NEXT
NEXT
next  
%>
发表于 2005-10-25 21:41:11 | 显示全部楼层
引用内容由 比尔熊 发表于 2005-9-17 19:12
这个题目还真有些难度呀
请问下, 如果:
abcde 与 bacde 均合要求的话, 那该如何编写呢?
也就是字母顺序不同的也算, 只要是5个不同的字母的任意就行.


新来的,刚好10分钟,大家看这样行不行?




  1. <script language="javascript">
  2. var array1 = new Array();
  3. var array2 = new Array("a","b","c","d","e");
  4. var nn = 5;  //这里应该是array2的 下标+1 命令我忘了,先这样顶住。
  5. var count = 1;
  6. function displayans(ary1,ary2,num){
  7. if (num<nn){
  8. for (var i=0;i<(nn-num);i++){
  9.         //靠的就是这四行
  10.         ary1.push(ary2.shift());
  11.         document.write((count++)+"["+ary1.join("")+"]<br>");
  12.         displayans(ary1,ary2,num+1);
  13.         ary2.push(ary1.pop());
  14. }
  15. }
  16. }
  17. displayans(array1,array2,0);
  18. </script>

复制代码


因为到“L”结果太多,我到"E"就算了,反正原理是一样的。

结果已经按次序排好了。

请各位大哥批评指正。

[ 本帖由 gammer 最后编辑于 2005-10-25 21:50 ]
发表于 2005-10-26 10:31:02 | 显示全部楼层
楼上的错了,
随便举一个例子
[eacbd]都没有
发表于 2005-10-26 11:15:11 | 显示全部楼层
引用内容由 登陆不起啦 发表于 2005-10-26 10:31
楼上的错了,
随便举一个例子
[eacbd]都没有


楼上的大哥,[eacbd]在272行。
发表于 2005-10-26 11:22:20 | 显示全部楼层
哦,我在你new Array("a","b","c","d","e")后面加了个"f"我以为能正常显示。
结果没搜索到[eacbd],
你显示5个是对的。都是325条记录。
显示6个有1956条。
发表于 2005-10-26 11:39:19 | 显示全部楼层
引用内容由 登陆不起啦 发表于 2005-10-26 11:22
哦,我在你new Array("a","b","c","d","e")后面加了个"f"我以为能正常显示。
结果没搜索到[eacbd],
你显示5个是对的。都是325条记录。
显示6个 ...



  1. <script language="javascript">
  2. var array1 = new Array();
  3. var array2 = new Array("a","b","c","d","e");
  4. var nn = array2.length;  //这里改了
  5. var count = 1;
  6. function displayans(ary1,ary2,num){
  7. if (num<nn){
  8. for (var i=0;i<(nn-num);i++){
  9.         //靠的就是这四行
  10.         ary1.push(ary2.shift());
  11.         document.write((count++)+"["+ary1.join("")+"]<br>");
  12.         displayans(ary1,ary2,num+1);
  13.         ary2.push(ary1.pop());
  14. }
  15. }
  16. }
  17. displayans(array1,array2,0);
  18. </script>
复制代码


原来有一行代码忘了,
现在改回来,应该可以了。
发表于 2005-10-26 11:52:20 | 显示全部楼层
对了..........
5*4*3*2*1+5*4*3*2+5*4*3+5*4+5=325

6*5*4*3*2*1+6*5*4*3*2+6*5*4*3+6*5*4+6*5+6=1956
发表于 2005-10-26 14:07:08 | 显示全部楼层

用ASP写的,发现超过了10分钟!

为什么………………1000块都拿不到。555555555555555555


<%
zzz=Split(" a b c d e f g h i j k l"," ")
a=0
for j=1 to 12        /1
for h=1 to 12        /2
for i=1 to 12        /3
for g=1 to 12        /4
for k=1 to 12        /5
aaaa=""
a=a+1
aaaa=aaaa+zzz(j)
aaaa=aaaa+zzz(h)
aaaa=aaaa+zzz(i)
aaaa=aaaa+zzz(g)
aaaa=aaaa+zzz(k)
aaaa=aaaa+zzz(k)
response.write a
response.write "."+aaaa+"<br>"
next
next
next
next
next
%>
您需要登录后才可以回帖 登录 | 加入无忧

本版积分规则

小黑屋|手机版|Archiver|无忧脚本 ( 苏ICP备05080427号 )|值班电话:027-62300445   鄂公网安备 42011102000433号

GMT+8, 2018-7-20 23:39 , Processed in 0.093612 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表