不用循环,不用递归,输出1到100的整数
2008-07-12 14:09
309 查看
很久没有上CSDN了,昨晚去逛了一下,看到一个讨论如何不用循环输出1到100的整数的帖子标题上了论坛头版,于是进去掺和。
因为我觉得这个题目很有意思,对程序员的思维是个很好的考验,看看我们是不是只会定向思维了。
我在帖子里回复了好几次,把我想到的主要的几种解决代码贴在这里。
不用循环、不用递归,输出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版1:
<script language="vbscript">
ExecuteGlobal "i=1:" & Replace(Replace("AAAAAAAAAA","A","AAAAAAAAAA"),"A","document.writeln(i):i=i+1:")
</script>
这一思路的vbs版2:
<script language="vbscript">
dim x(100):document.write "<ol>"& Join(x,"<li>") &"</ol>"
</script>
(6)利用HTML的有序列表 <OL>的实现:
在用以上任一方法得到100个字符的字符串后,替换为<LI>: (巧妙的利用了HTML的特性,够投机取巧吧!)
这一思路的js版:
<script language="javascript">
eval('<ol>'+(new Array(101)).join('<li>')+'</ol>');
</script>
总结:
以上几种方法,如果你也能完全想到,那至少需要对SQL语句、js和vbs的API、HTML等非常熟悉。当然,最重要的是跳出惯性思维,灵活运用。
附CSDN原帖链接: http://topic.csdn.net/u/20080707/15/4ddd4781-88f7-4c9d-a2b2-7fb21360e244.html
因为我觉得这个题目很有意思,对程序员的思维是个很好的考验,看看我们是不是只会定向思维了。
我在帖子里回复了好几次,把我想到的主要的几种解决代码贴在这里。
不用循环、不用递归,输出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版1:
<script language="vbscript">
ExecuteGlobal "i=1:" & Replace(Replace("AAAAAAAAAA","A","AAAAAAAAAA"),"A","document.writeln(i):i=i+1:")
</script>
这一思路的vbs版2:
<script language="vbscript">
dim x(100):document.write "<ol>"& Join(x,"<li>") &"</ol>"
</script>
(6)利用HTML的有序列表 <OL>的实现:
在用以上任一方法得到100个字符的字符串后,替换为<LI>: (巧妙的利用了HTML的特性,够投机取巧吧!)
这一思路的js版:
<script language="javascript">
eval('<ol>'+(new Array(101)).join('<li>')+'</ol>');
</script>
总结:
以上几种方法,如果你也能完全想到,那至少需要对SQL语句、js和vbs的API、HTML等非常熟悉。当然,最重要的是跳出惯性思维,灵活运用。
附CSDN原帖链接: http://topic.csdn.net/u/20080707/15/4ddd4781-88f7-4c9d-a2b2-7fb21360e244.html
相关文章推荐
- 不用循环,不用递归,输出1到100的整数
- Javascript输出1到100的整数,不用循环,不用递归
- 不用循环,不用递归,输出1到100的整数
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法
- 不用循环,不用递归,输出1~1000的整数
- 函数式语言的优美:不用循环,不用递归,输出1...100的数
- 解题:不用循环、递归,如何从 1 打印到 100(转)
- 不用循环如何输出1~100
- for循环输出50到100之间的整数
- 解题:不用循环、递归,如何从 1 打印到 100?
- 不用循环~如何输出1~100?
- 不用循环和递归输出0-999的数
- 不用循环和递归计算1+2+3+...+100的值
- 不用循环,不用递归,从1打印到100
- 定义一个整数N,不用本地变量和循环,输入N,依次判断2N,4N,8N...,一旦大于5000,则倒序输出小于5000的那些数(...,8N,4N,2N,N)
- 不用循环、goto、递归打印1至100的各路写法
- 输出1-100,不使用循环 goto 递归
- 判断是否为2的幂||输出一个整数二进制格式中1的个数 非循环非递归实现
- 机试题:过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
- 微软面试100题之20题:输入一个表示整数的字符串,把该字符串转换成整数并输出