题目:一个六位数,分别用2,3,4,5,6乘它,得到的五个新数仍是由原数中的六个数字组成,只是位置不同,则此六位数是多少?
function evaluate() {
var multiplier = [2,3,4,5,6],
sortNumber = function (number) {
return parseInt((number + '').split('').sort().join(''), 10);
},
gameOver = false, // 判断是否已经找到,如果找到,结束循环
determine = function(origin) {
var result, i, len = multiplier.length;
for( i = 0; i < len; i++ ) {
result = origin * multiplier[i];
if (result < 100000 || result > 999999 || sortNumber(result) !== sortNumber(origin)) {
return;
}
if(i === (len-1)){
gameOver = true;
alert('此六位数是 ' + origin);
}
}
};
// Math.floor(1000000/6) 缩小范围
for(var j = Math.floor(1000000/6); j >= 100000 && !gameOver; j--) {
determine(j);
}
}
扩展阅读:
witter:
共有21 条评论
第一次知道还可以Split(“”)。。受教了
跑了下这个程序,结果是not find
程序循环等于凑数,既然是奥数题,简单算法是什么
@行骏 原来代码有个笔误,已经修正了。
@天然卷 奥数的解法是求出1/7的前六位……
Math.floor(1000000/6) 缩小范围
预估?
@天然卷 其实用另外的算法也可以算出的,不过比循环复杂多了,可以先确定出十万位的数(1),然后算出个位上的数(7),很自然其他位的数都可以预知了,然后每一位计算一次,计算后的数,不在可知的数中的去处,很自然最后的结果也就出来了,我笔算了下,大概15-20分钟可以解答出来。
111111这个算不算?
貌似不能正常运行、。
Math.floor(1000000/6)
166666之后的数乘以6之后都不再是6位了哈.
这里当然要确定下.
算法可以再优化点.
就是一个有意思的3, 6位数必定可以被3整除
for(var j = 99999; j <= Math.floor(1000000/6) && !gameOver; j=j+3)
学习了,不是很懂
认识 JS独特优点
有才的人呢~
额 高深的···看不懂,看来要跟你学习下
99999/7 就是答案
关注你了
团美网受益匪浅,继续更新哦!通过订阅功能不错,很好了
最近老是思考自己的网站怎么改版,可以帮我看看吗?
偶尔做做题真的很有意思~尝试用C捣鼓了个,代码量翻了一倍还多..
[...] 这段时间,怿飞的博客上有一篇用 JavaScript 解数学题,代码很简练优雅。于是突然想用C写写看,因为很久没写,就权当是练习也挺不错啊:) [...]
ie6下报错?
作为奥数题该怎么解呢
luosheng 2010年5月27日 上午 9:33 ₪
@天然卷 奥数的解法是求出1/7的前六位……
这是什么原理