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 胡满超 阅读(1043) |
评论 (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 胡满超 阅读(915) |
评论 (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 胡满超 阅读(794) |
评论 (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 胡满超 阅读(764) |
评论 (0) 编辑