//寻找数组最小值 int Find(int a[],int b[],int len) { if(len==1) { return min(a[0],b[0]); } int mid=(len-1)/2;//偶数取小的 奇数取中间 if(a[mid]==b[mid]) return a[mid]; else if(a[mid]<b[mid]) { Find(a+len-mid-1,b,mid+1); } else { Find(a,b+len-mid-1,mid+1); } } int Find_G(int a[],int b[],int len) { int mid; while(1) { if(len==1) return min(a[0],b[0]); mid=(len-1)/2;//偶数取下,奇数取中 if(a[mid]==b[mid]) return a[mid]; else if(a[mid]<b[mid]) { a=a+len-mid-1; len=mid+1; } else { b=b+len-mid-1; len=mid+1; } } } //不等长数组 int Find_GG(int a[],int lena,int b[],int lenb) { int mida=lena/2;//奇数取中间,偶数取上边 int midb=lenb/2; int low=min(mida,midb); if(lena==1) { if(lenb%2==0) {// if(a[0]>=b[midb]) {//则b[midb]为中点 return b[midb]; } else if(a[0]<=b[midb-1]) return b[midb-1]; else//此时a[0]正好夹在中间 return a[0]; } else {//为奇数+奇数 return b[midb]; } } if(lenb==1) { if(lena%2==0) { if(b[0]>=a[mida]) return a[mida]; else if(b[0]<a[mida-1]) return a[mida-1]; else return b[0]; } else return a[mida]; } if(a[mida]==b[midb]) return a[mida]; else if(a[mida]<b[midb]) { return Find_GG(a+mida,lena-low,b,lenb-low); } else return Find_GG(a,lena-low,b+midb,lenb-low); } void DFS(char* str,int n,int left,int right) { if(left==right&&left+right==2*n) { for(int i=0;i<2*n;i++) cout<<str[i]<<" "; cout<<endl; return; } if(left<right||left+right>2*n) return; int index=left+right; str[index]='('; DFS(str,n,left+1,right); str[index]=')'; DFS(str,n,left,right+1); } int _tmain(int argc, _TCHAR* argv[]) { int a[]={1,3,5,7,9}; int b[]={2,4,6,8,10}; cout<<Find_GG(a,sizeof(a)/sizeof(int),b,sizeof(b)/sizeof(int)); int n=3; char str[1000]; memset(str,0,sizeof(str)); DFS(str,n,0,0); return 0; }