[iLeask] Javascript 解决简单数学问题

0 views
Skip to first unread message

Leask Huang

unread,
Apr 7, 2009, 10:21:02 AM4/7/09
to ile...@googlegroups.com

今天有人问我一个数学问题:
"在由数字1、2、3、4、5组成的所有没有重复的5位数中,大于23145且小于43521的数共有多少个。"

最初想了想用排列组合的思想做,试算发现数量超过10个……
天呀,那么多!超过十个的事情就交给计算机算吧,于是放弃数学方法,改用Javascript解决。
首先尝试把重点放在五个数字的排列上,后来发现写出五个数字排列的算法还不如写出验证所合成的五位数的有效性来得简单,于是有了如下的程序:


<script type="text/javascript">
/*
=================================
ver 0.3
by LeaskH.com
i...@leaskh.com
April 7, 2009
=================================
*/

var iShan=0;

var ia;
var ib;

var xa;
var xb;
var xc;
var xd;
var xe;

for (ia=23145+1;ia<43521;ia++)
{
xa=0;
xb=0;
xc=0;
xd=0;
xe=0;
for (ib=0;ib<5;ib++)
{
switch(String(ia).substr(ib,1)){
case '1':
xa+=1;
break;
case '2':
xb+=1;
break;
case '3':
xc+=1;
break;
case '4':
xd+=1;
break;
case '5':
xe+=1;
break;
}
}
if(xa==1 && xb==1 && xc==1 && xd==1 && xe==1)
{
iShan+=1;
document.write(ia + ' | ');
}
}
document.write('<br />sum is: ' + iShan);
</script>


程序输出的结果如下:

23154 | 23415 | 23451 | 23514 | 23541 | 24135 | 24153 | 24315 | 24351
| 24513 | 24531 | 25134 | 25143 | 25314 | 25341 | 25413 | 25431 |
31245 | 31254 | 31425 | 31452 | 31524 | 31542 | 32145 | 32154 | 32415
| 32451 | 32514 | 32541 | 34125 | 34152 | 34215 | 34251 | 34512 |
34521 | 35124 | 35142 | 35214 | 35241 | 35412 | 35421 | 41235 | 41253
| 41325 | 41352 | 41523 | 41532 | 42135 | 42153 | 42315 | 42351 |
42513 | 42531 | 43125 | 43152 | 43215 | 43251 | 43512 |
sum is: 58

PS:由于我特别粗心大意,不知道程序有没有其他错漏。呵呵,我完成调试的环境是:Mac OS X Leopard 10.5.6 + Safari 3.2.1
--

--
Posted By Leask Huang to iLeask at 4/07/2009 10:20:00 PM

Reply all
Reply to author
Forward
0 new messages