遞迴和分治演算法 經典題目

2022-02-06 21:23:47 字數 3296 閱讀 9222

//made by syx

//2023年7月13日 21:05:27

////迴圈賽日程表

//快速排序

//合併排序

//棋盤覆蓋(有bug)

//求大數乘積(10進製,但有丟位)

//二分搜尋技術

//整數劃分

//階乘

/*//迴圈賽日程表

#include

#include

using namespace std;

const int n = 100;

int a[n][n];

int k;

void copy(int n);

void tourna(int n);

int main()

tourna(n/2);

copy(n);

}void copy(int n)}}

*//*

//迴圈賽日程表

#include

void table(int k,int (*a)[128])

m *= 2;}}

int main()

;table(4,a);

int _i = 0, _j = 0;

for(_i=0; _i<9; ++_i)

printf("\n\n");

return 0;}*/

/*//快速排序

#include

inline void swap(int &x,int &y)

int partition(int *a,int left,int right)

swap(a[left],a[j]);

return j;

}void qsort(int *a,int left,int right)

}int main()

;int i = 0;

for( i=0; i<=9; ++i)

printf("%d ",a[i]);

printf("a   \n");

qsort(a,0,9);

for( i=0; i<=9; ++i)

printf("%d ",a[i]);

printf("a   \n\n");

return 0;}*/

/*//合併排序

#include

void copy(int *a,int *b,int left,int right)

}void merge(int *a,int *b,int left,int m,int right)

if(i>m)

while( j<=right )

b[left++] = a[j++];

else

while( i<=m )

b[left++] = a[i++];

void mergesort(int *a,int left,int right)

;if(leftint main()

;int b[10] = ;

int i = 0;

for( i=0; i<=9; ++i)

printf("%d ",a[i]);

printf("a   \n");

mergesort(a,0,9);

for( i=0; i<=9; ++i)

printf("%d ",a[i]);

printf("a   \n\n");

return 0;}*/

/*//棋盤覆蓋(bug)

#include

int tile = 10;

int board[64][64];

void chessboard(int tr,int tc,int dr, int dc,int size)//以0開始,tr是x(自上到下),tc是y(自左到右),後同

//左下角

if(dr>=tr+s && dc=tr+s && dc>=tc+s)

chessboard(tr+s,tc+s,dr,dc,s);

else

}int main()

for( i=0; i<=size; ++i)

for( j=0; j<=size;++j)

board[i][j] = 0;

int dr,dc;

scanf("%d%d",&dr,&dc);

board[dr-1][dc-1] = 1;

chessboard(0,0,dr-1,dc-1,size);

for( i=0; ireturn 0;}*/

//棋盤覆蓋

/*#include "iostream.h"

#include "iomanip.h"

#define n 8

class qipan

if(dr>=tr+s&&dc=tr+s&&dc>=tc+s)

chessboard(tr+s,tc+s,dr,dc,s);

else

}public:

int tile,tr,tc,dr,dc,size;

int board[n+1][n+1];

};void main()

q.board[2][2]=-1;

q.chessboard(1,1,2,2,n);

for(int i=1;i<=n;i++)

return result;

}int main()

return -1;

}int main()

int num = 0,result = 0;

scanf("%d",&num);

result = binaryserach(a,100,num);

printf("%d\n",result);

return 0;}*/

/*//整數劃分問題

#include

//q(n,n) 就是求n的劃分數!

int q (int n,int m)   //求在正整數n的所有不同劃分中,將最大加數n1不大於m的劃分個數記住q(n,m)

int main()

*//*

//1 求階乘

#include

int jiecheng(int n)

int main()

return 0;}*/

演算法經典題目

1.在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 因為這是乙個從左到右遞增和從上到下遞增的二維陣列,例如下 1,2,3,4 2,3,4,5 3,4,5...

遞迴演算法經典例項 演算法 遞迴演算法

遞迴現象 老和尚講故事 自己呼叫自己 兩面鏡子互相映像 兩者相互呼叫 演算法思想 把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式自己呼叫自己的情況。遞迴函式 內部操作直接或間接地呼叫了自己的函式。遞迴函式兩大要素...

php遞迴演算法經典例項

遞迴函式為自呼叫函式,在函式體內直接或間接自己呼叫自己,但需要設定自呼叫的條件,若滿足條件,則呼叫函式本身,若不滿足則終止本函式的自呼叫,然後把目前流程的主控權交回給上一層函式來執行,可能這樣給大家講解,還是很難明白,直接上例子 function test n else echo n.test 2 ...