筆試刷題總結
阿新 • • 發佈:2019-02-08
今天刷了一些筆試題,以下是刷完筆試題後看到的相關知識點的解析,做個小結。
1、多型主要以兩種形式,靜態多型和動態多型,靜態多型主要實現了函式過載和運算子過載。動態多型主要實現了虛擬函式。虛擬函式是動態聯編,程式在執行的過程中確定呼叫哪一個函式。
2、int *s[8]; //定義一個指標陣列,該陣列中每個元素是一個指標,每個指標指向哪裡就需要程式中後續再定義了。
int (*s)[8]; //定義一個數組指標,該指標指向含8個元素的一維陣列(陣列中每個元素是int型)。
區分int *p[n]; 和int (*p)[n]; 就要看運算子的優先順序了。
int *p[n]; 中,運算子[ ]優先順序高,先與p結合成為一個數組,再由int*說明這是一個整型指標陣列。
int (*p)[n]; 中( )優先順序高,首先說明p是一個指標,指向一個整型的一維陣列。
3、計算機系統中,從內到外, 硬體系統,作業系統,支撐軟體,應用軟體。
下面是筆試題的程式設計練習:
題目1:
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
class Solution { public: bool Find(int target, vector<vector<int> > array) { if(array.empty()) return false; int row = array.size();//行 int column = array[0].size();//列 for(int i = 0; i < row; i++) { int left = 0; int right = column - 1; while(left <= right) { int mid = (left + right) / 2; if(target < array[i][mid]) { right = mid - 1; } else if(target > array[i][mid]) { left = mid + 1; } else { return true; } } } return false; } };
題目2:
大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。
n<=39
class Solution { public: int Fibonacci(int n) { int f[40]; f[0] = 0; f[1] = 1; for(int i = 2; i <= n; i++) { f[i] = f[i - 1] + f[i - 2]; } return f[n]; } };
題目3:
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.empty()) return false;
int row = array.size();//行
int column = array[0].size();//列
for(int i = 0; i < row; i++)
{
int left = 0;
int right = column - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if(target < array[i][mid])
{
right = mid - 1;
}
else if(target > array[i][mid])
{
left = mid + 1;
}
else
{
return true;
}
}
}
return false;
}
};
題目4:
輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> array;
if(head == NULL) return array;
stack<int> s;
ListNode* p = head;
while(p != NULL) {
s.push(p->val);
p = p->next;
}
while(!s.empty()) {
array.push_back(s.top());
s.pop();
}
return array;
}
};
新增筆記