從思想方法上可將演算法歸為以下幾種:直接法、列舉法、遞推法、遞迴法、回溯法等等。本節先介紹直接法、列舉法、遞推法的思想,其他演算法將在後續內容中逐步介紹。
直接法:根據問題給出的條件直接求解。
【例2.19】 用篩選法求100之內的所有素數,並將這些素數輸出。
#include
#include
#include
using namespace std;
const int n=100;
int main()
int count=0;
cout<
for(i=0;i
if(a[i]!=0)
cout<
return 0;
}列舉法
:在有限範圍內列舉所有可能的結果,找出其中符合要求的解,又稱「窮舉法」。其適合求解的問題是:可能的答案是有限個且答案是可知的,但又難以用解析法描述。通常,用迴圈結構來完成。
【例2.20】 中國古代數學史上著名的「百雞買百雞問題」:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何?
#include
#include
using namespace std;
int main()
return 0;
}遞推法
:通過問題的乙個或多個已知解,用同樣的方法逐個推算出其他解,如數列問題,近似計算問題等。通常,也要借助於迴圈結構完成。
【例2.21】用歐幾里德演算法(也稱輾轉法)求兩個整數的最大公約數。
【分析】假定兩個整數分別為num1和num2,最大公約數應當是不超過其中較小數的乙個整數。輾轉法的思想是:用num1除以num2,求出餘數resd,如果resd==0,則當前num2就是最大公約數,否則(resd!=0),num1=num2, num2=resd, 重複以上過程,直到resd==0為止。
#include
using namespace std;
int main()
cout<
return 0;
}【例2.22】 輸入乙個小於1的數x,求sinx的近似值,要求誤差小於0.0001。sinx的近似計算公式如下:
#include
using namespace std;
int main()
cout<
return 0;
}【例2.23】輸入乙個8位二進位制數,將其轉換為十進位制數輸出。
#include
using namespace std;
const int n=8;
int main()
cout<
for(i=n-1;i>=0;i--) cout<
cout<
return 0;
}
KNN 演算法的例項應用
為了提高給 helen 女士匹配約會物件的成功率,收集了各位男士的以下三種資訊 每年的飛行里程數 玩遊戲所耗時間百分比 每週消費的冰淇淋公升數 約會資料 datingtestset.txt 先看一下資料集的內容 這裡擷取了三行,前三列分別是每年的飛行里程數 玩遊戲所耗時間百分比和每週消費的冰淇淋公升...
2 12 大O法應用 基礎排序演算法的效能對比
先來看一下氣泡排序的 public static void bublesort int nums 氣泡排序的優化 public static void bublesort int nums 簡單插入排序演算法 如下 public static void selectionsort int nums ...
遞迴演算法應用例項 八皇后演算法
回溯演算法的經典案例 回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯.貝瑟爾於1848年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即 任意兩個皇后都不能外乾同一行 同一列或同一斜線上,問有多少種擺法。思路分析 第乙個皇后先放在第一行第一列 第二個皇后放在第二行第一列 然後判斷是否...