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

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

搜索
查看: 26089|回复: 115

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

[复制链接]
发表于 2005-9-17 01:22:41 | 显示全部楼层 |阅读模式
我认识了一个程序员,讲到我们毕业生出来工资大概多少的时候,他出了一道题,说,这个题目的月薪是1000 ,如果做不出 说明你现在可能还需要努力突破¥1000 ,而不是突破¥5000

请用程序打印出a b c d e f g h i j k l这十二个字符的全部组合,每种组合占一行
你的结果可能会是
a b c d e
a b c d f
……
请用任何你熟悉的语言写出程序

10分钟内完成,
 楼主| 发表于 2005-9-17 01:40:06 | 显示全部楼层
我用了最笨的方法:
<script language="javascript">
var a=new Array("a","b","c","d","e","f","g","h","i","j","k","l")
var b=new Array("a","b","c","d","e","f","g","h","i","j","k","l")
var c=new Array("a","b","c","d","e","f","g","h","i","j","k","l")
var d=new Array("a","b","c","d","e","f","g","h","i","j","k","l")
var e=new Array("a","b","c","d","e","f","g","h","i","j","k","l")
for(aa in a)
{
for(bb in b)
{
for(cc in c)
{
for(dd in d)
{
for(ee in e)
{

a.innerHTML+=a[aa]+"--"+b[bb]+"--"+c[cc]+"--"+d[dd]+"--"+e[ee]+"<br>"

}
}
}
}
}
</script>
<div id="a">&nbsp;</div>

警告:不要测试代码,会死机的!!
发表于 2005-9-17 02:36:42 | 显示全部楼层
这个问题在短时间内写得既正确又好恐怕很不容易...
真能在十分钟内写出下面的程序来...
拿5K/月的工资也不算高了...


  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. function getComb(stack, buff)
  5. {
  6.         if(stack.length + buff.length < 5) return; //字母不够了,不用再试
  7.         while(stack.length > 0) //字母还没用完
  8.         {
  9.                 buff.push(stack.shift()); //选取字母
  10.                 if(buff.length < 5) //还没到5个字母
  11.                 {
  12.                         getComb(stack.slice(0), buff.slice(0)); //继续选取
  13.                 }
  14.                 else if(buff.length == 5)
  15.                 {
  16.                         document.write(buff+"<br>"); //够数量了,输出
  17.                 }
  18.                 buff.pop(); //丢弃用过的字母
  19.         }

  20.         return;
  21. }
  22. getComb(stack, buff);
  23. </script>
复制代码
发表于 2005-9-17 09:05:48 | 显示全部楼层
楼上,历害,堆栈加递归,怎么想到的
发表于 2005-9-17 13:04:01 | 显示全部楼层

  1. <script language="vbscript">
  2. Dim a(3),i,j,m
  3. a(0)="a"
  4. a(1)="b"
  5. a(2)="c"

  6. For i=0 to Ubound(a)-1
  7.         For j=0 to Ubound(a)-1
  8.                 For m=0 to Ubound(a)-1
  9.                         document.Write(a(i)&","&a(j)&","&a(m)&"<br>")
  10.                 Next
  11.         Next
  12. Next
  13. </script>
复制代码

限制10分钟,只能想出这种办法了。。。

[ 本帖由 恍然小悟 最后编辑于 2005-9-17 13:06 ]
发表于 2005-9-17 13:52:22 | 显示全部楼层
五分钟内搞定,嘿嘿
没看到那个l,加上,呵呵
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <HTML>
  3. <HEAD>
  4. <TITLE> New Document </TITLE>
  5. <META NAME="Author" CONTENT="">
  6. <META NAME="Keywords" CONTENT="">
  7. <META NAME="Description" CONTENT="">
  8. </HEAD>
  9. <BODY>
  10. <Script Language="JavaScript">
  11. var arr="abcdefghijkl";
  12. var count=0;
  13. arr=arr.split("");
  14. for(var i=0;i<arr.length-4;i++){
  15.         for(var k=i+1;k<arr.length-3;k++){
  16.                 for(var j=k+1;j<arr.length-2;j++){
  17.                         for(var l=j+1;l<arr.length-1;l++){
  18.                                 for(var m=l+1;m<arr.length;m++){
  19.                                         count++;
  20.                                         document.write(count+"."+arr[i]+arr[k]+arr[j]+arr[l]+arr[m]+"<br>");
  21.                                 }
  22.                         }
  23.                 }
  24.         }
  25. }
  26. </Script>
  27. </BODY>
  28. </HTML>
复制代码

[ 本帖由 逍遥云 最后编辑于 2005-9-17 14:10 ]
 楼主| 发表于 2005-9-17 16:10:07 | 显示全部楼层
堆栈的思路是什么样的??说来听一听.^_^
发表于 2005-9-17 16:34:34 | 显示全部楼层
具有后进先出特性的数据结构
发表于 2005-9-17 16:36:40 | 显示全部楼层
买本数据结构好好看啊
发表于 2005-9-17 19:12:56 | 显示全部楼层
这个题目还真有些难度呀
请问下, 如果:
abcde 与 bacde 均合要求的话, 那该如何编写呢?
也就是字母顺序不同的也算, 只要是5个不同的字母的任意就行.
发表于 2005-9-19 10:43:01 | 显示全部楼层

写了一个检测值函数,花了大半天,要是这样的话,就死了

把字符减少了几个,太容易死掉

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <HTML>
  3. <HEAD>
  4. <TITLE> New Document </TITLE>
  5. <META NAME="Author" CONTENT="">
  6. <META NAME="Keywords" CONTENT="">
  7. <META NAME="Description" CONTENT="">
  8. </HEAD>
  9. <BODY>
  10. <Script Language="JavaScript">
  11. function chkVar(){
  12.         var arr=arguments;
  13.         var t=0;
  14.         var flag=false;
  15.         while(t<arr.length){
  16.         for(var i=t;i<arr.length-1;i++){
  17.                 if(arr[t]==arr[i+1]){
  18.                         flag=false;
  19.                         break;
  20.                 }
  21.                 else{
  22.                         flag=true;
  23.                 }
  24.         }
  25.         if(flag){
  26.                 t++;
  27.         }
  28.         else{
  29.                 break;
  30.         }
  31.         }
  32. return flag;
  33. }
  34. var arr="abcdef";
  35. var count=0;
  36. arr=arr.split("");
  37. for(var i=0;i<arr.length;i++){
  38.         for(var k=0;k<arr.length;k++){
  39.                 for(var j=0;j<arr.length;j++){
  40.                         for(var l=0;l<arr.length;l++){
  41.                                 for(var m=0;m<arr.length;m++){
  42.                                         if(chkVar(arr[i],arr[k],arr[j],arr[l],arr[m])){
  43.                                         count++;
  44.                                         document.write(count+"."+arr[i]+arr[k]+arr[j]+arr[l]+arr[m]+"<br>");
  45.                                         }
  46.                                 }
  47.                         }
  48.                 }
  49.         }
  50. }
  51. </Script>
  52. </BODY>
  53. </HTML>
复制代码

[ 本帖由 逍遥云 最后编辑于 2005-9-19 10:44 ]
发表于 2005-9-19 10:53:02 | 显示全部楼层

  1. <script>
  2. var n=12, r=5;
  3. var OR=new Array('a','b','c','d','e','f','g','h','i','j','k','l');
  4. var C=new Array();
  5. var used=new Array();
  6. var k=1;

  7. function combine(pos,h)
  8. {
  9.         var i;
  10.         /*如果已选了r个元素了,则打印它们*/
  11.         if (pos==r)
  12.         {
  13.                 document.write("(",k++,") {",OR[C[0]]);
  14.                 for (i=1; i<r; i++) document.write(",",OR[C[i]]);
  15.                 document.write("}<br>");
  16.                 return;
  17.         }
  18.         /*对于所有未用的元素*/
  19.         for (i=h; i<=n-r+pos; i++)
  20.         {
  21.                 if (!used[i])
  22.                 {
  23.                         /*把它放置在组合中*/
  24.                         C[pos] = i;
  25.                         /*使用该元素*/
  26.                         used[i]++;
  27.                         /*搜索第i+1个元素*/
  28.                         combine(pos+1,i+1);
  29.                         /*恢复递归前的值*/
  30.                         used[i]--;
  31.                 }
  32.         }
  33. }
  34. combine(0,0);
  35. </script>
复制代码
发表于 2005-9-19 11:00:23 | 显示全部楼层
嗯,不错,继续10楼的问题
发表于 2005-9-19 11:13:47 | 显示全部楼层
人家没说每行必须5个数吧?
所以abcdefghij这个算不算?
发表于 2005-9-19 11:16:40 | 显示全部楼层
这个是求排列的,由于结果太多,所以只列出3个的

  1. <script>
  2. var n=12, r=3;
  3. var OR=new Array('a','b','c','d','e','f','g','h','i','j','k','l');
  4. var C=new Array();
  5. var used=new Array();
  6. var k=1;

  7. function permute(pos)
  8. {
  9.         var i;
  10.         /*如果已选了r个元素了,则打印它们*/
  11.         if (pos==r)
  12.         {
  13.                 document.write("(",k++,") {",OR[C[0]]);
  14.                 for (i=1; i<r; i++) document.write(",",OR[C[i]]);
  15.                 document.write("}<br>");
  16.                 return;
  17.         }
  18.         /*对于所有未用的元素*/
  19.         for (i=0; i<n-r+pos; i++)
  20.         {
  21.                 if (!used[i])
  22.                 {
  23.                         /*把它放置在组合中*/
  24.                         used[i]=1;
  25.                         C[pos] = i;
  26.                         /*搜索第i+1个元素*/
  27.                         permute(pos+1);
  28.                         /*恢复递归前的值,目的是使以后改元素可用*/
  29.                         used[i]=0;
  30.                 }
  31.         }
  32. }
  33. permute(0);
  34. </script>
复制代码

[ 本帖由 小谢 最后编辑于 2005-9-19 11:20 ]
发表于 2005-9-19 12:31:43 | 显示全部楼层
我来废两句:
月影老兄给出的是12选5的所有组合,小谢列的是12选3!

这是一个排列的问题,高中数学课本上的!

[ 本帖最后由 bqrm_521 于 2006-10-30 10:12 编辑 ]
发表于 2005-9-19 13:47:01 | 显示全部楼层
全部组合 喔,不只是包括5位的吧??

引用内容由 月影 发表于 2005-9-17 02:36 AM
这个问题在短时间内写得既正确又好恐怕很不容易...
真能在十分钟内写出下面的程序来...
拿5K/月的工资也不算高了...

[code]
<script>
var stack = new Array("a","b","c&q ...
发表于 2005-9-19 13:56:02 | 显示全部楼层
用多个嵌套循环的办法是最容易想到的,并且是最笨的,用这种方法,用人单位够呛敢用你!!
发表于 2005-9-19 14:03:58 | 显示全部楼层
引用内容由 kevinp 发表于 2005-9-19 01:47 PM
全部组合 喔,不只是包括5位的吧??




汗...原来是全组合啊...我看了楼主的Case还以为是“全5组合”呢! =.=

如果全组合就更简单了 ^^


  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. function getComb(stack, buff)
  5. {
  6.         while(stack.length > 0) //字母还没用完
  7.         {
  8.                 buff.push(stack.shift()); //选取字母
  9.                 document.write(buff+"<br>"); //输出
  10.                 getComb(stack.slice(0), buff.slice(0)); //继续选取
  11.                 buff.pop(); //丢弃用过的字母
  12.         }

  13.         return;
  14. }
  15. getComb(stack, buff);
  16. </script>
复制代码

[ 本帖由 月影 最后编辑于 2005-9-19 14:12 ]
发表于 2005-9-19 14:32:28 | 显示全部楼层
发现月影写的代码都是很高效的!
您需要登录后才可以回帖 登录 | 加入无忧

本版积分规则

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

GMT+8, 2017-3-29 03:42 , Processed in 0.149732 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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