This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 计算奶牛 | |
// 初始 1 头奶牛,奶牛在 1 岁和 4 岁的时候生小牛(假设全部为母牛),5 岁时死亡,求给定的年数奶牛的数量。 | |
// 以下是我演算的各个方法。 | |
// 01 | |
var YEARS = arguments.length > 0 && parseInt(arguments[0], 10) || 10; | |
var cows = {}, | |
cow; | |
var _cowIdx = 0, | |
_cowNum = 0; | |
function addcow() { | |
cows[_cowIdx] = { | |
'old' : 0, | |
'idx': _cowIdx | |
}; | |
_cowNum++; | |
_cowIdx++; | |
} | |
function rmcow(idx) { | |
delete cows[idx]; | |
_cowNum--; | |
} | |
function proc_cow (cow) { | |
cow.old++; | |
switch (cow.old) { | |
case 1: | |
case 4: | |
addcow(); | |
break; | |
case 5: | |
rmcow(cow.idx); | |
break; | |
} | |
} | |
addcow(); | |
for (var i=0; i<YEARS; i++) { | |
for (cow in cows) { | |
proc_cow(cows[cow]); | |
} | |
} | |
print(_cowNum); | |
// 02 | |
var YEARS = arguments.length > 0 && parseInt(arguments[0], 10) || 10; | |
var cows = {}, | |
cow; | |
var _cowIdx = 0, | |
_cowNum = 0; | |
function addcow() { | |
cows[_cowIdx] = 0; | |
_cowNum++; | |
_cowIdx++; | |
} | |
function rmcow(idx) { | |
delete cows[idx]; | |
_cowNum--; | |
} | |
function proc_cow (cow) { | |
switch (++cows[cow]) { | |
case 1: | |
case 4: | |
addcow(); | |
break; | |
case 5: | |
rmcow(cow); | |
break; | |
} | |
} | |
addcow(); | |
for (var i=0; i<YEARS; i++) { | |
for (cow in cows) { | |
proc_cow(cow); | |
} | |
} | |
print(_cowNum); | |
// 03 | |
var YEARS = arguments.length > 0 && parseInt(arguments[0], 10) || 10; | |
var cows = {}, | |
cow; | |
var _cowIdx = 0, | |
_cowNum = 0; | |
cows[++_cowIdx] = 0; | |
_cowNum++; | |
for (var i=0; i<YEARS; i++) { | |
for (cow in cows) { | |
switch (++cows[cow]) { | |
case 1: | |
case 4: | |
cows[++_cowIdx] = 0; | |
_cowNum++; | |
break; | |
case 5: | |
delete cows[cow]; | |
_cowNum--; | |
break; | |
} | |
} | |
} | |
print(_cowNum); | |
// 04 | |
var YEARS = arguments.length > 0 && parseInt(arguments[0], 10) || 10; | |
var cows = [0, 0, 0, 0, 0], // 0 - 4 岁奶牛数量 | |
cow1; | |
cows[0] = 1; | |
for (var i=0; i<YEARS; i++) { | |
cow1 = cows[1]; | |
cows[1] = cows[0]; | |
cows[4] = cows[3]; | |
cows[0] += cows[4]; | |
cows[3] = cows[2]; | |
cows[2] = cow1; | |
} | |
print(cows[4] + cows[3] + cows[2] + cows[1] + cows[0]); | |
// 前 3 个是一种思路,最后一个比较吓到我。。。。 :) |
No comments:
Post a Comment