C 練習題(求兩個數的階乘相減 鍊錶問題)

2021-09-14 04:20:12 字數 1849 閱讀 2747

一、階乘相減問題

【問題】已知一塊靶場大小為m*n(m行n列),每個點上都有一面旗子,我們的炮兵發射炮彈,炮彈一次只能炸掉一面旗子,每次炮彈的落點座標都有記錄,問你幾炮過後,靶場還剩下幾面旗子呢?

【輸入】有若干行,第一行為兩個整數m,n,以空格分隔,都是整數,且1<=m<=n<=100;

接下來有若干行,每行有兩個整數x,y,代表炮彈落點的座標(行、列座標,編號從0開始)。

(ctrl + z)eof結束;

【輸出】

乙個整數,代表最後靶場上剩餘的旗子數。

【問題解決】

【第一種】

#include #include using namespace std;

int main()

;//定義乙個二維陣列,代表炮彈落點,全部初始化為0

while (cin >> x >> y )

} //最後利用for迴圈計算靶場上還剩下的旗子數量,既從總和裡去掉座標數值為1的點

for(int i=0;i第一種方法比較囉嗦,下面給出第二種方法

【第二種】

#include #include using namespace std;

int main()

;//定義乙個二維陣列代表炮彈落點並全部初始化為0

while (cin >> x >> y )

} cout << sum << endl;//輸出結果

}

以上是做這個題的兩種方法

二、鍊錶問題

【問題】

實現鍊錶的輸入(已實現)、輸出和刪除成員函式。輸入時,根據endtag確定是否結束輸入;刪除時,根據下標(從0開始)。

注意,輸入的順序跟存放的順序以及輸出的順序是相反的。

【問題解決】

完整**如下:

#include "stdlib.h"

#include "iostream"

using namespace std ;

class list; //前視定義,否則友元無法定義

class linknode

linknode (linknode *ptr = null)

~linknode(){};//釋放函式

};class list

// 帶頭結點

~list () //析構函式

void makeempty ( ); //鍊錶置空,已實現

int remove ( int i );

void input(int endtag);

void output();

};//清空鍊錶

void list:: makeempty ( ) };

void list :: input (int endtag)

}void list::output()

coutelse

n++;

}return 1;

}int main()

這個問題的**比較難理解,也很難在部落格裡講解清楚,所以在這裡就不給各位朋友詳細講解了,避免造成各位朋友的誤解或者迷茫。這個**可以直接執行,各位朋友將這段**放在相應的ide環境裡編譯執行即可。

簡單說一下吧,其實鍊錶實現的就是節點的轉移,或者說是指標的轉移,鍊錶中的每個節點都必須擁有頭指標和尾指標,頭指標代表當前節點的位址或者頭位址,而尾指標代表的是下乙個節點的(頭)位址,也就是說當前節點的尾指標其實是指向下乙個節點的頭指標的,二者其實是乙個東西;每次移動乙個節點,都必須將頭指標和尾指標全部換成下乙個節點的頭指標和尾指標。如果能理解這些,這個問題就不難了。(ps:這是作者本人的理解,如果有不對的地方,歡迎各位朋友批評指正)

PTA練習題 兩個有序鍊錶序列的交集

已知兩個非降序鍊錶序列s1與s2,設計函式構造出s1與s2的交集新鍊錶s3。輸入格式 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用 1表示序列的結尾 1不屬於這個序列 數字用空格間隔。輸出格式 在一行中輸出兩個輸入序列的交集序列,數字間用空格分開,結尾不能有多餘空格 若新鍊錶為空,輸...

C 集合練習題(鍊錶LinkedList)

封裝乙個集合 提供push t value 在尾部新增新元素,pop 刪除並返回最後乙個元素,shift 刪除並返回第乙個元素,unshift t value 在首位新增新元素 底層用鍊錶模式儲存資料 實現用foreach迴圈自定義集合 class mycollecion ienumerable 在...

有關鍊錶的練習題。

剛剛學了線性表,會了一些基本操作,現在來做一些經典面試題來鞏固一下知識。一。列印鍊錶從尾到頭。1 從尾到頭列印單鏈表。普通法 void print slistnode pfirst end pnode 將pnode賦給end。pnode pfirst 將pnode賦成頭結點列印出此時的值,繼續迴圈。...