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

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

搜索
楼主: 155120699

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

[复制链接]
发表于 2008-1-9 12:47:15 | 显示全部楼层
原帖由 winter 于 2008-1-9 11:39 发表

var arr="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p".split(",");
var r=[[]]
var t1=new Date();
for(var i=0;i=0;j--)
    {
        r.push(r[j]+arr);
    }
document.write(r.join(""));
var t2=new Dat ...



呵呵,还是版主厉害
发表于 2008-1-9 20:55:02 | 显示全部楼层
原帖由 winter 于 2008-1-9 00:11 发表

var arr="a,b,c,d,e,f,g,h,i,j,k,l".split(",");
var r=[[]]
for(var i=0;i=0;j--)
    {
        r.push(r[j].concat(arr));
    }
document.write(r.join(""));
alert(r.length-1);

俺写滴 短吧
...

Winter 兄,貌似不对吧?
举个例子“c,f,a”这个字符串都没有哦?
发表于 2008-1-9 22:03:00 | 显示全部楼层
原帖由 js小白 于 2008-1-9 20:55 发表

Winter 兄,貌似不对吧?
举个例子“c,f,a”这个字符串都没有哦?


应该有a,c,f吧?
是组合不是排列哟……
发表于 2008-1-9 22:13:52 | 显示全部楼层
原帖由 winter 于 2008-1-9 11:32 发表

/*
有一个数列:
950,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955
将此数列中的任意项进行不重复的组合,找出其中所有的代数和等于11890的组合。
*/
var table=new Arra ...


这个按照我的思路来,好像效率比你的稍微好一点。
发表于 2008-1-9 22:33:07 | 显示全部楼层
原帖由 月影 于 2008-1-9 22:03 发表


应该有a,c,f吧?
是组合不是排列哟……

哦,原来是组合。不好意思。:loveliness:
发表于 2008-1-9 22:52:20 | 显示全部楼层
原帖由 fris 于 2008-1-9 22:13 发表


这个按照我的思路来,好像效率比你的稍微好一点。

不清楚 还有别的思路?
发表于 2008-1-10 10:16:17 | 显示全部楼层
有点不明白,为什么2005年的贴子,中间一下子断了三年,后面就直接是2008年的跟贴了.
发表于 2008-1-10 10:28:40 | 显示全部楼层
我以为 既然允许发帖 就应该允许挖坟:lol
接着旧帖子讨论也没什么不好
发表于 2008-1-10 12:54:00 | 显示全部楼层
好贴,引来这么多恐龙,值,好多恐龙平时都很少见啊?
发表于 2008-1-10 13:09:47 | 显示全部楼层
不会做,不及格,去反省了
发表于 2008-1-10 18:03:14 | 显示全部楼层
原帖由 winter 于 2008-1-9 22:52 发表

不清楚 还有别的思路?


楼主的题目我就是按照这个思路稍微改了改:lol

  1. <script language="javascript" type="text/javascript">
  2. var _arrlist=[950,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955];
  3. var max = 11890;
  4. var arrlist =[];
  5. var temp=[];
  6. var _temp=[];
  7. var result =[];
  8. function main(){
  9.      for(var i=0; i<_arrlist.length; i++){
  10.            if(parseInt(_arrlist[i]) < max){arrlist[arrlist.length] = parseInt(_arrlist[i]);}
  11.      }
  12.      arrlist=arrlist.sort(_y);
  13.      while(arrlist[0]+arrlist[arrlist.length-1]>max){arrlist.splice(0, 1);}

  14.      for(var i=0; i<arrlist.length; i++){addToarr(arrlist[i]);}
  15.      document.write(result.join("<br>"));
  16.      document.write("<br>共有"+(result.length)+"种情况符合要求<br>");

  17. }
  18. function addToarr(_t){
  19.      _temp=temp.slice(0);
  20.      temp[temp.length] = _t;
  21.      for(var i=0; i<_temp.length; i++){
  22.      var t1=(_temp[i].toString()+"+"+_t).toString();
  23.      var t2=eval(t1.replace(",","+"));
  24.      if(t2==max){result[result.length]=t1;}
  25.      if(t2<max){temp[temp.length]=t1;}
  26.      }
  27. }
  28. function _y(a,b){return b-a;}
  29. var t1 = new Date();
  30. main();
  31. var t2 = new Date();
  32. document.write("用时:"+(t2.valueOf() - t1.valueOf())+"ms");
  33. </script>
复制代码

  1. <script language="javascript" type="text/javascript">
  2. /*
  3. 有一个数列:㙾,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955
  4. 将此数列中的任意项进行不重复的组合,找出其中所有的代数和等于11890的组合。
  5. */
  6. var table=new Array(11891);
  7. var numbers=[950,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955];
  8. var t1 = new Date();
  9. for(var i=1;i<table.length;i++)table[i]=0;
  10. table[0]=1;
  11. for(var i=0;i<numbers.length;i++)
  12.     for(var j=11890;j>=numbers[i];j--)
  13.         table[j]+=table[j-numbers[i]];

  14. document.write(table[11890]);
  15. var t2 = new Date();
  16. document.write("用时:"+(t2.valueOf() - t1.valueOf())+"ms");
  17. </script>
复制代码
发表于 2008-1-10 18:14:10 | 显示全部楼层
原帖由 fris 于 2008-1-10 18:03 发表


楼主的题目我就是按照这个思路稍微改了改:lol


var _arrlist=[950,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955];
var max = 11890;
var arrlist =[];
var temp=[]; ...

哦 这个啊 当_arrlist里数字非常大 而且数目比较少的时候你那样做会快些 你可以用
[1,2,950,1830,1315,5716,2079,2124,2071,700,2276,1235,2554,934,3356,1071,1090,9955]
试一下

BTW fris是不是上学时玩过ACM啊 这么喜欢算法

[ 本帖最后由 winter 于 2008-1-10 18:23 编辑 ]
发表于 2008-1-15 15:08:24 | 显示全部楼层
去年跟月版学的,就是一个求子集算法
  1. <script language="javascript" type="text/javascript">
  2. var str = ["a","b","c","d","e","f","g","h","i","j","k","l"];
  3. Array.prototype.getAllSubSets = function(){
  4.     if(this.length == 0) return [];
  5.     var ret = this.slice(1).getAllSubSets();
  6.   
  7.     for(var i = ret.length - 1; i >= 0; i--)
  8.     {
  9.         ret.push([this[0]].concat(ret[i]));
  10.     }
  11.     ret.push([this[0]]);
  12.     return ret;
  13. }
  14. document.write('{'+str.getAllSubSets().join('}<br>{')+'}');
  15. </script>
复制代码

[ 本帖最后由 lixingyi 于 2008-1-15 15:14 编辑 ]
发表于 2008-1-19 18:53:34 | 显示全部楼层
我初学JS 也不会什么算法 就这么写出来了.我的只能abcde加个f就不行 效率不好
初学,编程风格 什么的太差...


  1. <script language="javascript" type="text/javascript">
  2. <!--
  3. var a="abcde"
  4. var a=a.split("")
  5. var html="";
  6. var code="";
  7. var execCode="";
  8. var str=""
  9. num=0
  10. for (var i=0;i<a.length ;i++ )
  11. {
  12. code+="for(var n"+i+"=0;n"+i+"<a.length;n"+i+"++){\n"
  13. }
  14. for (var i=0;i<a.length ;i++ )
  15. {
  16. execCode+="+\"&nbsp;,&nbsp;\"+a[n"+i+"]"
  17. }
  18. code+="num++\nstr+=num+\"&nbsp;&nbsp;\"+"+execCode.substring(17)+"+\"<br>\""
  19. for (var i=0;i<a.length ;i++ )
  20. {
  21. code+="\n}"
  22. }
  23. eval(code)
  24. document.write(str)
  25. //-->
  26. </script>

复制代码





一个朋友写的 果然是高手. 可以abcdef 可以达到f  再多也不行了


  1. <script language="javascript">
  2. var initStr = "abcde";
  3. //init
  4. var initTotle=initStr.length;
  5. var initArr = new Array();
  6. var strArr = new Array();
  7. var totleNum = 1;
  8. for(i=0;i<initTotle;i++){
  9.         initArr.push(0);
  10.         totleNum *= initTotle;
  11.         strArr.push(initStr.charAt(i));
  12. }
  13. //begin
  14. for(i=0;i<totleNum;i++){
  15.                 document.write((i+1)+" "+getStr()+"<br>");
  16.                 var temp = initTotle;
  17.                 while(temp--){
  18.                         if(initArr[temp]++ == initTotle-1){
  19.                         initArr[temp]=0;
  20.                         }
  21.                         else break;

  22.                 }
  23. }
  24. //alert(totleNum);
  25. function getStr(){
  26.         var str = ""
  27.         for(k=0;k<strArr.length;k++){
  28.                 str +=  strArr[initArr[k]];
  29.         }
  30.         return str;
  31. }
  32. </script>
复制代码



我们两个做的都是排列...


两天前看到的这帖  直到今天才能发帖  限制时间有点太长了吧......

我的处女帖:loveliness:

[ 本帖最后由 include58 于 2008-1-19 19:04 编辑 ]
发表于 2011-4-1 15:54:44 | 显示全部楼层

使用二进制数

从00000000000,一直计算到11111111111
即可得出组合结果.转10进制计算,算完,再对每个结果,做一次排列即可。
发表于 2012-9-12 10:10:39 | 显示全部楼层
有些意思!
您需要登录后才可以回帖 登录 | 加入无忧

本版积分规则

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

GMT+8, 2018-12-10 12:45 , Processed in 0.089201 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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