08 2008 檔案
求整數1~N范圍和為M的所有組合
摘要: 問題:找出整數1~N范圍和為M的所有集合,M<=N且M>1,集合里的數不允許重復。
解答:這個問題用遞歸解決最簡單,代碼如下:
1 #define MAX_NUM 20 //要足夠大
2 int log[MAX_NUM]; //記錄和數
3 int index = 0; //log[]數組的當前指針
4
5 void calc(int start, int n)
6 {
7 if (n == 0)
8 {
9 for(int j = 0; j < index; j++)
10 printf("%d ", log[j]);
11 printf("\n");
12 }
13 else
14 {
15 for(int i = start; i<=n; i++)
<
閱讀全文
posted @
2008-08-29 16:13 胡滿超 閱讀(1049) |
評論 (0) 編輯
重建二叉樹
摘要: 已知前序和中序重建二叉樹,已知后序和中序重建二叉樹。
void ReBuild_PreIn(char *pPreOrder, char *pInOrder, int nTreeLen, NODE **pRoot)
{
if (pPreOrder == NULL || pInOrder == NULL)
{
return;
}
NODE *pTemp = new NODE;
pTemp->chValue = *pPreOrder;
pTemp->pLeft = NULL;
pTemp->pRight = NULL;
if (*pRoot == NULL)
{
*pRoot = pTemp;
}
if (nTreeLen == 1)
{
return;
}
<
閱讀全文
posted @
2008-08-27 17:51 胡滿超 閱讀(921) |
評論 (0) 編輯
斷言式編程
摘要: 我們先看一個函數:函數的功能完成1~10的加法。
int Add1to10(int a, int b)
{
return a +b;
}
但是一般我們還需要加上幾條代碼:
int Add1to10(int a, int b)
{
assert(a >= 1 && a <= 10);
assert(b >= 1 && b < =10);
if ( a < 1 || a > 10 || b < 1 || b > 10)
return -1;
return a +b;
}
加上上面幾條代碼的作用是檢查函數的輸入參數,當參數不正確的時候不光要在返回值上得到體現,而且會觸發assert斷言,提醒我們參數有誤。
斷言式編程體現一個編程的思想,在我們的程序執行偏離預想的路線時給出提醒。當程序執行偏離預想的路線時一般會出現兩種可能:即斷言以上的程序沒有理解下面程
閱讀全文
posted @
2008-08-19 10:00 胡滿超 閱讀(806) |
評論 (0) 編輯
Quick Sort C Code Implement
摘要: void QuickSort(int* pData,int left,int right)
{
int i = left, j = right;
int middle = pData[(left+right)/2]; // midlle value
int iTemp;
do
{
while (pData[i] < middle && i < right) i++;
while (pData[j] > middle && j > left) j--;
if (i < j) // swap
{
iTemp = pData[i];
pData[i] = pData[j];
pData[j] = iTemp;
i++; j--;
}
else if (i == j)
{
i++; j--;
}
} while (i < j
閱讀全文
posted @
2008-08-18 17:02 胡滿超 閱讀(770) |
評論 (0) 編輯