程式設計練習 part2

2021-10-03 21:08:42 字數 1246 閱讀 6919

一.題目 :對於乙個給定的井字棋棋盤,請設計乙個高效演算法判斷當前玩家是否獲勝。

給定乙個二維陣列board,代表當前棋盤,其中元素為1的代表是當前玩家的棋子,為0表示沒有棋子,為-1代表是對方玩家的棋子。

測試樣例:[[1,0,1],[1,-1,-1],[1,-1,0]]

返回:true

思路:對於井字棋的獲勝方式,有下面幾種:

1.一行全為1

2.一列全為1

3.斜角全為1

有獲勝的方法就很好寫**了。

**:

bool checkwon

(vectorint>

> board)

for(

int i=

0;i<

2;i++)if

(board[0]

[0]+board[1]

[1]+board[2]

[2]==

3)return true;

if(board[0]

[2]+board[1]

[1]+board[2]

[0]==

3)return true;

return false;

}

解題思路:如果從前往後遍歷字串,遇到空格,就需要把%20插入進去,而%20是三個字元,插進去就要後面的字元全部移動,而如果空格一多,移動的頻率就會更多,這樣顯然不是最好的辦法。

觀察後發現乙個空格替換會讓原來的字串的長度加2,那麼如果定義原字串的長度為n,那麼替換之後的字串為n+2*空格數。那麼就我們定義兩個指標,乙個指向原字串末尾,乙個指向替換字串末尾,然後讓指向原字串末尾的指標向前移動,如果不是空格,就把此時的值賦給替換後的字串。如果是空格,就讓替換字串的指標向前移動三次,分別賦予%20,直到結束。這樣做的好處是每乙個字元都只會被移動一次,效率大大提高。

**:

string replacespace

(string s)

int oldpoint =0;

int newpoint =0;

while

(s[oldpoint]

!='\0'

) oldpoint++

; newpoint = oldpoint +

2* count;

while

(newpoint>oldpoint&&oldpoint>=0)

else

}return s;

}

網路程式設計part2

五層協議 計算機1 計算機2 應用層 應用層 socket socket 傳輸層 段傳輸層 網路層包 網路層資料鏈路層 幀資料鏈路層 物理層 互動機 物理層 客戶端軟體send 服務端軟體recv 作業系統 作業系統 計算機硬體 物理介質 計算機硬體 客戶端軟體send 服務端軟體recv 作業系統...

Mosh Python教程練習題 Part 2

7 字串索引列印。course python for beginners 根據變數名 索引 列印字串 列印索引為2的字串 print course 2 列印從索引x到y的字串 y不會被列印,只列印到y 1 print course 1 4 列印最後乙個字元 print course 1 複製字串 a...

C 記憶體管理 part2

allocating class instances using new new operator 也可以用於對class instance分配動態記憶體。如下例 include using namespace std class point private int x int y int main...