使用分治法求最大值
這個函式將陣列a[l]...a[r]分成a[l],...,a[m]和a[m+1],...a[r]兩部分,分別求出每一部分的最大元素(遞迴地),並返回較大的那乙個作為整個陣列的最大元素.如果陣列大小是偶數,則兩部分大小相等;如果是奇數,第一部分比第二部分的大小大1.
#include #include #include #include using namespace std;
#define ok 1
#define error -1
#define true 1
#define false 0
typedef int status;
int max(int a, int l, int r)
int main()
; int maxx = max(a, 0, 6);
printf("%d\n", maxx);
return 0;
}
漢諾塔的解
我們把盤子(遞迴地)移動到c上的方案是,將除了最下面的盤子之外的所有盤子移到b上,然後將做下面的盤子移到c上,然後(遞迴地)再將其他盤子移回到最下面的盤子上面.
#include #include #include #include using namespace std;
#define ok 1
#define error -1
#define true 1
#define false 0
typedef int status;
//輸出盤子的移動
void shift(int n, char x, char y)
void hanoi(int n, char a, char b, char c)
//以c為中間軸,將a上的盤子移動到b上
hanoi(n-1, a, c, b);
shift(n, a, c);
//以a為中間軸,將b上的盤子移動到c上
hanoi(n-1, b, a, c);
}int main()
使用分治法在尺子上畫刻度
要在尺子上畫刻度線,我們首先在左半邊畫刻度線,然後在中間畫一條最長的刻度線,最後在右半邊畫刻度線.
#include #include #include #include using namespace std;
#define ok 1
#define error -1
#define true 1
#define false 0
typedef int status;
//畫線
void mark(int m, int h)
//劃分該區域內的刻度
void rule(int l, int r, int h)
}int main()
C語言實現分治法
我用了大約三種方法實現,逐漸減少時間複雜度,分別用不同的命名 方式來區分他們,順便列印了那個子區間的和值最大,maxsum 1 用陣列的方式實現三次遍歷,求出所有子串行的和值,並且比較大小,求出最大子串行值 maxsum 2 用另乙個陣列來儲存從下標0開始的所有和值,然後操作次此序列,用減的方式,來...
埃拉託色尼篩法 來自 演算法 C語言實現
這個程式的功能是 如果自然數i是素數,則設a i 為1,否則設為0.首先把陣列中的所有元素設為1,否則設為0.首先把陣列中的所有元素設為1,已表明沒有任何數以被證明是非素數.然後,把陣列中所對應索引處已證明是非素數 已知素數的倍數 的元素設為0.如果所有更小素數的倍數都已設為0,a i 仍為1,則可...
C語言實現快速排序法(分治法)
分治法的基本思想 將原問題分解為若干個更小的與原問題相似的問題,然後遞迴解決各個子問題,最後再將各個子問題的解組合成原問題的解。利用分治法可以將解決辦法分為 三步走 戰略 1 在資料集中選定乙個元素作為 基準 pivot 2 將所有資料集小於基準的元素放在基準左邊,大於基準的元素放在基準右邊,把原資...