Saturday, September 19, 2009

推荐好书(C about)

C In A Nutshell

中文名字未知。
前几天去书店翻到,
觉得是本好书。
感觉适合我这样上不上下不下的人。


找到一本 ebook,
周末翻。

Wednesday, September 2, 2009

数奶牛

// 计算奶牛
// 初始 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 个是一种思路,最后一个比较吓到我。。。。 :)