創新工場筆試

來源:互聯網
上載者:User

考了三道題。

佩服李開複老師的省錢本事:考試直接發白紙,連印刷費也省了,試題直接用投影儀顯示在講台螢幕上。

 

三道題,看著不難,所以我就現在先在稿紙上把程式基本都寫出來,最後剩近二十分鐘,才匆忙開始抄寫到答題紙上。

 

失策:

1、最後二十分鐘抄寫程式,比較匆忙,導致抄寫過程完全是機械式的,來不及重新思考或檢查。有點浪費了二十分鐘去抄寫程式的遺憾。

改正:在稿紙上,基本寫出解題思路;之後,直接把答案寫到答卷上。避免三道題寫完了,再寫答卷的話,什麼思路都忘了、斷了。

 

 

回來後,發現第一題答得有漏洞,於是在機器上,重新實現了程式:

題意:把句子"I love you baby",倒置成"baby you love I"。

#include <iostream><br />using namespace std;<br />void Reverse(char *sentence)<br />{<br />int len = strlen(sentence);<br />string ts, word;<br />for (int i = len - 1; i >= 0; i--)<br />{<br />char c = sentence[i];<br />if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'))<br />{<br />word += c;<br />}<br />else<br />{<br />if (word.length() > 0)<br />{<br />for (int j = word.length() - 1; j >= 0; j--)<br />{<br />ts += word[j];<br />}<br />word = "";<br />}<br />ts += c;<br />}<br />}<br />if (word.length() > 0)<br />{<br />for (int j = word.length() - 1; j >= 0; j--)<br />{<br />ts += word[j];<br />}<br />}<br />strcpy(sentence, ts.c_str());<br />}<br />int main()<br />{<br />char cs[100] = "I love you baby";<br />Reverse(cs);<br />cout<<cs<<endl;<br />return 0;<br />}<br /> 

答卷上的漏洞:

1、word沒有反轉過來:

for (int j = word.length() - 1; j >= 0; j--)<br />{<br /> ts += word[j];<br />} 

2、word沒有置空值:word = "";

3、對word的最後情況,沒有考慮:

if (word.length() > 0)

{

for (int j = word.length() - 1; j >= 0; j--)

{

ts += word[j];

}

}

 

 

知識延伸:

1、對判斷一個char是否是一個字母,我的判斷是:('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')。方法是比較低效的。

可使用<ctype>庫中的函數:isalpha函數。

 

2、標準庫函數isalpha的實現是:

int isalpha(int ch)<br />{<br /> return (unsigned int)((ch | 0x20) - 'a') < 26u;<br />} 

在ASCII碼中A-Z的編碼為

   二進位             十進位
A 01000001              65
B 01000010              66
.
.
Y 01011001              89
Z 01011010              90

所以A-Z的編碼高位的第2、3位始終為10,然後通過後面5位來表示26個字母。

在ASCII碼中a-z的編碼為
   二進位             十進位
a 01100001              97
b 01100010              98
.
.
y 01111001              121
z 01111010              122
所以a-z的編碼高位的第2、3位始終為11,然後通過後面5位來表示26個字母。

ch | 0x20 表示將A-Z轉換為a-z

 

3、關於位操作符:

(1)、~取反~0011 = 1100

(2)、&位與0011 & 0110 = 0010

(3)、|位或0011 | 0110  = 0111

(4)、^異或0011 ^ 0110 = 0101


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.