作者:周思博 (Joel Spolsky)
Thursday, December 29, 2005
屬於 Joel on Software, https://www.joelonsoftware.com/2005/12/29/test-yourself/
當我要去賓州開始我的第一年大學生活時,我認為自己已經是非常好的程式設計師。靠完全自學,我用 Turbo Pascal 寫了兩套系統...一個是小型工廠的存貨系統,另一個是能對以色列一個最大的麵包工廠的生產線做排程。
直到期中考我才了解我並不是如自己想的一樣聰明。某些考題我完全搞砸了,因為我還是不了解指標(pointers)跟遞迴(recursion)。
不是對某人懷恨在心,我將這些期中考題與你分享...看看你是否能做的比我大一還好。
1a. (MIT-Scheme) 使用以下函數
(define (accumulate combiner null-value l)
(if (null? l)
null-value
(combiner (car l)
(accumulate combiner
null-value
(cdr l)))))
實作平方和, 就是計算一串數字平方的加總,例如
(sum-of-squares '(1 2 3 4 5))
應為 55
(解答請反白全選下列的文字欄:)
(define (sum-of-squares l)
(accumulate (lambda (x y) (+ (* x x) y))
0
l))
1b. (JavaScript) 好吧,也許 Scheme 不是你擅長的,這個問題跟 1a 一樣,只是是用 JavaScript
使用以下函數
function accumulate(combiner, nullValue, l)
{
if (l.length == 0)
return nullValue;
var first = l.shift();
return combiner(first, accumulate(combiner, nullValue, l));
}
實作平方和, 就是計算一串數字平方的加總,例如
sumOfSquares([1,2,3,4,5])
應為55
(解答請反白全選下列的文字欄:)
function sumOfSquares(lst)
{
return accumulate(function(x,y){return x*x+y}, 0, lst);
}
2. (ANSI C) 以下列格式寫一個C的程式:
#include <stdio.h>
int main(int argc, char **argv)
{
???
}
使得它在編譯之後,可以如下執行
% ./a.out could harold eat eight salami elephants
而它會印出每個參數的第一個字母(在這個例子,是"cheese")
(解答請反白全選下列的文字欄:)
#include <stdio.h>
int main(int argc, char** argv)
{
int i;
for (i=1; i<argc; i++)
{
putchar(argv[i][0]);
}
putchar('\n');
return 0;
}
3. (ANSI C) 底下的C程式輸出是什麼?
#include <stdio.h>
char *fn(int i, char *s)
{
while (i)
{
s++;
i--;
}
return s;
}
int main(int argc, char** argv)
{
int a = 2;
static char c[] = "test";
printf("%s\n", fn(a,c));
return 0;
}
(解答請反白全選下列的文字欄:)
st (followed by a newline)
想要更多的程式設計挑戰,請見 TopCoder
這些網頁的內容為表達個人意見。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.