test.

来源:互联网 发布:明道软件优缺点 编辑:程序博客网 时间:2024/05/21 05:23
//@duanby 矩阵最大路径和//L[i,j] = max{L[i-1,j-1]+a[i][j],L[i-1,j]+a[i][j]};/*73 88 1 02 7 4 44 5 2 6 5*/int max__(int a, int b){return a>b? a:b;}int GetMaxPath(int **Matrix, int N, int M){int **L = new int*[N+1];int i,j;for (i=0;i<N+1;++i){L[i]=new int[M+1];}for (j=0;j<M+1;++j){L[0][j]=0;}for(i=0;i<N+1;++i){L[i][0]=0;}int max = INT_MIN;for (i=1;i<N+1;++i){for (j=1;j<=i;++j){int temp = *((int *)Matrix+(i-1)*M+j-1);L[i][j]=max__((L[i-1][j-1]+temp),(L[i-1][j]+ temp));if (L[i][j]>max){max=L[i][j];}}}return max;}int main(){int matrix[5][5]={{7,0,0,0,0},{3,8,0,0,0},{8,1,0,0,0},{2,7,4,4,0},{4,5,2,6,5},};cout<<GetMaxPath((int **)matrix,5,5);}
////寻找数组中的最小值和最大值.《编程之美》解法三,比较次数1.5N-2void GetMaxMinNum(int array[], int length, int &minNum, int &maxNum){if (NULL == array || length <= 0){return;}int posStart;if (length & 0x1 !=0){minNum = maxNum = array[0];posStart=1;}else{if (array[0]>array[1]){minNum=array[1];maxNum=array[0];}else{minNum=array[0];maxNum=array[1];}posStart = 2;}for (;posStart<length;posStart+=2){if (array[posStart]<array[posStart+1]){if (minNum>array[posStart]){minNum=array[posStart];}if (maxNum<array[posStart+1]){maxNum=array[posStart+1];}}else{if (minNum>array[posStart+1]){minNum=array[posStart+1];}if (maxNum<array[posStart]){maxNum=array[posStart];}}}return ;}

//全组合void PrintSequence(int array[],int number,int length){static vector<int> ivec;if (number==0){copy(ivec.begin(),ivec.end(),ostream_iterator<int>(cout," "));cout << endl;}else if(length>0){ivec.push_back(*array);PrintSequence(array+1,number-1,length-1);ivec.pop_back();PrintSequence(array+1,number,length-1);}}int main(){int arr[]={1,2,3,4};for (int i = 1 ; i<=sizeof(arr)/sizeof(int); ++i){PrintSequence(arr,i,sizeof(arr)/sizeof(int));}}


typedef char ElemType;typedef struct node{ElemType data;node *lchild;node *rchild;}*BinaryTree;//建立二叉树 abd##e##cf##g##void CreateBinaryTree(BinaryTree &root){ElemType value;cin >> value;if (value == '#'){root = NULL;}else{node *cur = new node;cur->data = value;cur->lchild=NULL;cur->rchild=NULL;root=cur;CreateBinaryTree(root->lchild);CreateBinaryTree(root->rchild);}}//前序遍历二叉树 abdecfgvoid PrintBinaryTree(BinaryTree root){if (root==NULL){return;}cout << root->data;PrintBinaryTree(root->lchild);PrintBinaryTree(root->rchild);}//二叉树中节点最大距离static int getlong(BinaryTree root, int &high){if (root==NULL){high = 0;return 0;}int leftHigh,rightHigh;int leftDistance = getlong(root->lchild,leftHigh);int rightDistance = getlong(root->rchild,rightHigh);high = (leftHigh>rightHigh?leftHigh:rightHigh) +1;int maxDistance = (leftDistance>rightDistance?leftDistance:rightDistance);return maxDistance > (leftHigh+rightHigh) ? maxDistance:(leftHigh+rightHigh);}int GetLongestDistance(BinaryTree root){if (NULL == root){return 0;}int hight;return getlong(root,hight);}int main(){BinaryTree root=NULL;CreateBinaryTree(root);PrintBinaryTree(root);cout <<endl<< GetLongestDistance(root);return 0;}

//@duanby 随手写快排void swap(int &a,int &b){a=a^b;b=a^b;a=a^b;}int partition(int array[],int start,int end){srand(time(NULL));int pos = rand()%(end-start+1) + start;swap(array[end],array[pos]);int k = array[end];int j = start-1;int i = start;for (;i<end;i++){if (array[i]<k){j++;swap(array[i],array[j]);}}swap(array[++j],array[end]);return j;}void QuickSort(int array[],int start, int end){if (NULL == array){return;}if (start<end){int ret = partition(array,start,end);QuickSort(array,start,ret-1);QuickSort(array,ret+1,end);}}


int max_(int a, int b, int c){int max = a>b?a:b;return max > c? max: c;}int min_(int a, int b, int c){int min = a>b?b:a;return min < c? min:c;}//@duanby//动态规划,状态转移方程//max[i]=max{a[i],max[i-1]*a[i],min[i-1]*a[i]}//min[i]=min{a[i],min[i-1]*a[i],max[i-1]*a[i]}void LongestMultiple(int array[],int len){if (NULL == array || len <= 0){return;}int *max = new int[len];assert(max);int *min = new int[len];assert(min);max[0]=array[0];min[0]=array[0];int maxValue=max[0];for (int i = 1; i < len; ++i){max[i]=max_(max[i-1]*array[i],min[i-1]*array[i],array[i]);min[i]=min_(max[i-1]*array[i],min[i-1]*array[i],array[i]);if (maxValue<max[i]){maxValue=max[i];}}if (maxValue<0){cout << -1;}elsecout << maxValue;delete [] max;delete [] min;}int main(){int arr[]={1,2,3,-1,5,-2};LongestMultiple(arr,sizeof(arr)/sizeof(int));}

//@duanby 打印循环矩阵...void PrintMatrix(const int N){int **tancgle = new int *[N];assert(tancgle);int i,j;for (i=0;i<N;++i){tancgle[i] = new int[N]();assert(tancgle[i]);}int row,column;for(row=0,column=0;2*row<N&&2*column<N;row++,column++){for (; column<N;column++){if (row==0&&column==0){column++;}if (tancgle[row][column]==0){tancgle[row][column] = tancgle[row][column-1]+1;}elsebreak;}for (row++,column--;row<N;row++){if (tancgle[row][column]==0){tancgle[row][column] = tancgle[row-1][column]+1;}elsebreak;}for (column--,row--;column>=0;column--){if (tancgle[row][column]==0){tancgle[row][column] = tancgle[row][column+1]+1;}elsebreak;}for (row--,column++;row>0;row--){if (tancgle[row][column]==0){tancgle[row][column] = tancgle[row+1][column]+1;}elsebreak;}}for (i=0;i<N;++i){for (j=0;j<N;++j){cout << tancgle[i][j]<< "\t";}cout << endl;}}int main(){PrintMatrix(6);}

void swap__(int &a,int &b){a = a^b;b = a^b;a = a^b;}//@duanby 堆排序的2种操作,shiftdown,shiftupvoid shiftdown(int array[],int length,int pos){if (NULL==array||length<=0||pos>length){return;}int child;for(child=2*pos+1;child < length;pos = child,child=2*child+1){if (child+1 < length && array[child+1] > array[child]){child++;}if (array[pos]<array[child]){swap__(array[pos],array[child]);}}}void shiftup(int array[],int length, int pos){int parent;for (parent = ((pos-1)>>1);parent>=0;pos=parent){if (array[parent]<array[pos]){swap__(array[parent],array[pos]);}elsebreak;}}int main(){int array[]={1,2,6,8,9,4};int len = sizeof(array)/sizeof(int);for (i = ((len-1)>>1); i >=0; i--){shiftdown(array,len,i);}for (i=len-1;i>=0;i--){swap(array[i],array[0]);shiftdown(array,i,0);}}

void PrintHasWater(int **matrix,int row, int column){int i,j;for (i=0;i<row;++i){for (j=0;j<column;++j){bool hasWater = true;if (j-1>=0 && *((int *)matrix+i*row+j)> *((int *)matrix+i*row+j-1) ){hasWater=false;}if (i+1<=column-1 &&*((int *)matrix+i*row+j)> *((int *)matrix+(i+1)*row+j)){hasWater=false;}if (j+1<=row-1 && *((int *)matrix+i*row+j)> *((int *)matrix+i*row+j+1)){hasWater=false;}if (i-1>=0 && *((int *)matrix+i*row+j)> *((int *)matrix+(i-1)*row+j)){hasWater=false;}if (hasWater){cout << i <<"&" << j << " is "<< *((int *)matrix+i*row+j)<<endl;}}}}int main(){const int M = 3;const int N =3;int arr[M][N]={{1,2,3},{2,0,4},{3,4,5},};PrintHasWater((int **)arr,M,N);}

void swap__(char &a, char &b){if (a!=b){a=a^b;b=a^b;a=a^b;}}// @duanby RGRBRB ---> RRGBBvoid SortRGB(char array[], int length){if (NULL == array || length <= 0){return;}char *rPos = array;char *bPos = array+length-1;char *gPos = array;while (gPos <= bPos){if (*gPos=='R'){swap__(*rPos++,*gPos++);}else if (*gPos=='G'){gPos++;}else if (*gPos=='B'){swap__(*gPos,*bPos--);}}}


// 1~10的数, 和为12void PrintSumSeq(int n, int sum, vector<int> &ivec){if (0==n||sum<0){return;}if (0==sum){copy(ivec.begin(),ivec.end(),ostream_iterator<int>(cout," "));cout << endl;return;}ivec.push_back(n);PrintSumSeq(n-1,sum-n,ivec);ivec.pop_back();PrintSumSeq(n-1,sum,ivec);}int main(){vector<int> ivec;//1至10 之间的数,和为12.打印...PrintSumSeq(10,12,ivec);}

//@duanby  array[] 元素差最大bool gHasError=false;int GetMaxSub(int array[],int length, int &pos1, int &pos2){if (NULL == array || length < 2){gHasError=true;return 0;}int maxSub = array[1]-array[0];int min = array[0];pos1=1,pos2=1;int i;for (i=1;i<length;++i){if (array[i]<min){min = array[i];pos2=i+1;}if (array[i]-min>maxSub){maxSub=array[i]-min;pos1=i+1;}}return maxSub;}int main(){int arr[]={1,2,3,4,-5,9,100};int a,b;cout << GetMaxSub(arr,sizeof(arr)/sizeof(int),a,b);cout << endl<<a<<" "<<b;}



//@duanby//*ab*cde* ---> ***abcdevoid MakeChange(char array[], int length){if (NULL == array || length<=0){return;}char *pStartPos = array + length -1;char *pChPos=array+length-1;char *pBegin = array;while(pChPos>array){while (*pStartPos != '*'){pStartPos--;}while (*pChPos<'a'|| *pChPos > 'z'){pChPos--;}swap__(*pStartPos--,*pChPos--);}}int main(){char array[]="*ab*cde*";MakeChange(array,sizeof(array)-1);}


//@duanby 2014迅雷笔试 第五题 编程,计算unicode字符串中多少字符。int calc_utf8_count(unsigned char *data_ptr, unsigned int data_len){int count = 0; //计算字符数unsigned int pos = 0;while (pos < data_len){if ((unsigned char)0 == (*(data_ptr+pos) & 0x80)){pos++;count++;continue;}else if ((unsigned char)192 == (*(data_ptr+pos) & 0xe0)){if (pos+1<data_len && ((*(data_ptr+pos+1)&0x80)==(unsigned char)128)){pos+=2;count++;continue;}elsereturn -1;}else if ((unsigned char)224 == (*(data_ptr+pos) & 0xe0)){if (pos+1<data_len && ((*(data_ptr+pos+1)&0x80)==(unsigned char)128)){if (pos+2<data_len && ((*(data_ptr+pos+2)&0x80)==(unsigned char)128)){pos+=3;count++;continue;}elsereturn -1;}elsereturn -1;}elsereturn -1;}return count;}int main(){unsigned char temparray[13]={(unsigned char) 0xEF,(unsigned char) 0x8F,(unsigned char) 0xBC,(unsigned char) 0x6F,(unsigned char) 0xCF,(unsigned char) 0x8C,    (unsigned char) 0xEF,(unsigned char) 0x8F,(unsigned char) 0xBC,(unsigned char) 0x6F,(unsigned char) 0x6F,(unsigned char) 0x6F,(unsigned char) 0x6F};cout << calc_utf8_count(temparray,13)<<endl;}

//@duanby 矩阵最大路径和//L[i,j] = max{L[i-1,j-1]+a[i][j],L[i-1,j]+a[i][j]};/*73 88 1 02 7 4 44 5 2 6 5*/int max__(int a, int b){return a>b? a:b;}int GetMaxPath(int **Matrix, int N, int M){int **L = new int*[N+1];int i,j;for (i=0;i<N+1;++i){L[i]=new int[M+1];}for (j=0;j<M+1;++j){L[0][j]=0;}for(i=0;i<N+1;++i){L[i][0]=0;}int max = INT_MIN;for (i=1;i<N+1;++i){for (j=1;j<=i;++j){int temp = *((int *)Matrix+(i-1)*M+j-1);L[i][j]=max__((L[i-1][j-1]+temp),(L[i-1][j]+ temp));if (L[i][j]>max){max=L[i][j];}}}return max;}int main(){int matrix[5][5]={{7,0,0,0,0},{3,8,0,0,0},{8,1,0,0,0},{2,7,4,4,0},{4,5,2,6,5},};cout<<GetMaxPath((int **)matrix,5,5);}


//@duanby 逆序对int GetReverseNumCore(int array[],int start, int end){if (start>=end){return 0;}int mid = start + ((end - start)>>1);int midCount = 0;int i = start,j = mid+1;for (i = start;i<=mid;++i){for (j = mid+1;j<=end;++j){if (array[i]>array[j]){midCount++;}}}intleftNum = GetReverseNumCore(array,start,mid);int rightNum = GetReverseNumCore(array,mid+1,end);return leftNum+rightNum+midCount;}int GetReverseNum(int array[],int length){if (NULL == array || length <= 0){return 0;}return GetReverseNumCore(array,0,length-1);}int main(){int arraya[]={7,5,6,4,3,1,10};cout <<GetReverseNum(arraya,7);}

//一个长度为 n 的数组 a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即
//a[0]变为 a[1]到 a[n-1]的积,a[1]变为 a[0]和 a[2]到 a[n- 1]的积,...,a[n-1]为 a[0]到 a[n-2]
//的积(就是除掉当前元素,其他所有元素的积)。
void arrayMul(int array1[],int array2[],int length)
{
int left = 1;
int right = 1;
int i;
for (i=0;i<length;++i)
{
array2[i]=1;
}
for (i=0;i<length;++i)
{
array2[i]*=left;
array2[length-i-1]*=right;
left *=array1[i];
right *=array1[length-i-1];
}
return;
}
原创粉丝点击