一、階乘相減問題
【問題】已知一塊靶場大小為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賦成頭結點列印出此時的值,繼續迴圈。...