[作業] 演算法 week 2
國立嘉義大學演算法作業,可觀摩但請勿抄襲。
國立嘉義大學演算法作業,可觀摩但請勿抄襲。
好用資源
二分搜尋法 Binary Search 搜尋是一種很經典的演算法, 其中有一種搜尋法是將 已排序 的數列, 藉由比大小將數列分成 一半 並 縮小 搜尋範圍。 稱之為 「二分搜尋法」、「二元搜尋法」! #include <iostream> #include <algorithm> using namespace std; void binarySearch(int *number, int wanted, int strat, int stop); int main() { int number[105]; int n; while (cin>>n) { for (int i=0;i<n;i++) cin>>number[i]; sort(number,number+n); int m, wanted; cin>>m; for (int i=0;i<m;i++) { cin>>wanted; binarySearch(number, wanted, 0, n-1); cout<<endl; } } } void binarySearch(int *number, int wanted, int start, int stop) { int next = (start + stop) / 2; if (start > stop) { cout<<"error"; return ; } cout<<next<<" "<<number[next]<<" "; if (wanted > number[next]) binarySearch(number, wanted, next+1, stop); else if (wanted == number[next]) return ; else binarySearch(number, wanted, start, next-1); }
參考程式碼如下: int caluScore(string &answer, int rightScore, int unansweredScore, int wrongScore) { string reply; getline(cin,reply); int score = 0; int length = reply.size(); for (int i=0;i<length;i++) { if (reply[i] == '.') break; if (reply[i] == ' ') score += unansweredScore; else if (reply[i] == answer[i]) score += rightScore; // means wrong else score += wrongScore; } if (score>100) score = 100; if (score<0) score = 0; return score; } ps 不太懂為什麼題目要傳參 &answer...
請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法! 第二題 此次解題用到 STL 中的 set , 需要引入 <set> 這個函式庫 set 意思是 集合 , C++ 中的 set 跟數學上的 集合 很像 set 中不會有重複的元素 但是 set 會自動由小到大排序 STL 中有一個 find 函式,意思就是尋找該容器中是否存在這個數值,回傳值為 iterator 其他就是單純邏輯運算 查詢 <algorithm> 函式庫,會有意想不到的答案 ※ 雖然 set 很好用,但是對於 C++ 初學者較難理解,所以先用 array 實作 set 看看喔! 程式碼大概如下: #include <iostream> #include <set> using namespace std; void printAnd(set<int> a, set<int> b); void printOr(set<int> a, set<int> b); void printNot(set<int> a, set<int> b); void printXor(set<int> a, set<int> b); void printSet(set<int> a); int main() { set<int> setA; set<int> setB; int a,b; cin>>a>>b; for (int i=0;i<a;i++) { int temp; cin>>temp; setA....