因为我觉得这个题目很有意思,对程序员的思维是个很好的考验,看看我们是不是只会定向思维了。
我在帖子里回复了好几次,把我想到的主要的几种解决代码贴在这里。
不用循环、不用递归,输出1到100的整数
(1)SQL版:利用了联表和identity函数
select top 100 identity(tinyint,1,1) as ii into #a from sysobjects a, sysobjects b;
select * from #a;
drop table #a;
(2)利用VBScript特有的String函数(生成重复字符组成的串):
<script language="vbscript">
ExecuteGlobal "i=0"&Replace(String(100,"A"),"A",":i=i+1:document.writeln i")
</script>
(3)定时器版: (只是一种思路,该方法运行慢且耗资源)
这一思路的js版
<script language="javascript">
i=0,k=[];j=setInterval('if(i>100){clearInterval(j);alert(k)}else{k[i]=++i}',20);
</script>
vbs版同理
(4)利用数组特性快速生成100个字符的串
这一思路的js版
<script language="javascript">
i=0;eval((new Array(101)).join('document.writeln(++i);'));
</script>
这一思路的vbs版:
<script language="vbscript">
i=0:dim s(100):ExecuteGlobal Join(s,":i=i+1:document.writeln i")
</script>
(5)利用10*10进行替换(replace),快速得到100个字符的串。
这一思路的js版
<script language="javascript">
eval("i=1;"+("AAAAAAAAAA".replace(/A/g,"AAAAAAAAAA").replace(/A/g,'document.writeln(i++);')));
</script>
这一思路的vbs版:
<script language="vbscript">
ExecuteGlobal "i=1:" & Replace(Replace("AAAAAAAAAA","A","AAAAAAAAAA"),"A","document.writeln(i):i=i+1:")
</script>
(6)利用HTML的有序列表 <OL>的实现:
在用以上任一方法得到100个字符的字符串后,替换为<LI>: (巧妙的利用了HTML的特性,够投机取巧吧!)
这一思路的js版:
<script language="javascript">
eval('<ol>'+(new Array(101)).join('<li>')+'</ol>');
</script>
这一思路的vbs版:
<script language="vbscript">
dim x(100):document.write "<ol>"& Join(x,"<li>") &"</ol>"
</script>
(7)巧用JS中replace函数的第二个参数:
<script language="javascript">
i=0;document.writeln((new Array(101)).join('A ').replace(/A/g,function(){return (++i);}));
</script>
<script language="javascript">
document.writeln((new Array(101)).join('A').replace(/A/g,function(){return (arguments[1]+1)+' ';}));
</script>
总结:
以上几种方法,如果你也能完全想到,那至少需要对SQL语句、js和vbs的API、HTML等非常熟悉。当然,最重要的是跳出惯性思维,灵活运用。
附CSDN原帖链接: http://topic.csdn.net/u/20080707/15/4ddd4781-88f7-4c9d-a2b2-7fb21360e244.html