#include <iostream>#include <fstream>#include <string>using namespace std;bool IsMiddle( int a[], int b[], int max, int &i, int& upper, int& lower , int& result ){ bool bResult = false; if ( a[i] >= b[max-i-2] && a[i] <= b[max-i-1] ) { result = a[i]; if ( i== max-1 ) { result+=b[0]; } else { result += ( a[i+1] < b[max-i-1] ) ? a[i+1] : b[max-i-1]; } bResult = true; } else { if ( a[i] < b[max-i-2]) { lower=i; i=upper; } else { upper=i; i=lower; } if ( a[i] >= b[max-i-2] && a[i] <= b[max-i-1] ) { bResult = true; } } result/=2; return bResult;}int GetMiddle( int a1[], int a2[], int length ){ int result=0; int i1, i2, u1=length-1, l1=0, u2=length-1, l2=0; int index=0; while ( abs( l1-u1) >1 || abs( l2-u2) >1 ) { i1 = ( l1 + u1) /2; if ( abs( l1-u1) >1 ) { if ( IsMiddle( a1, a2, length, i1, u1, l1, result ) ) { break; } } i2 = ( l2+u2) /2; if ( abs( u2-l2) >1 ) { if ( IsMiddle( a2, a1, length, i2, u2, l2 , result ) ) { break; } } } return result;}int main() { string inFileName("c:\\inFile.txt"); string outFileName("c:\\outFile.txt"); ifstream inFile( inFileName.c_str(), ios_base::in); if ( inFile.fail() ) { cerr<<" Open file: " << inFileName << " failed! Exit..."; return -1; } ofstream outFile( outFileName.c_str(), ios_base::out | ios_base::trunc ); if ( outFile.fail() ) { cerr<<" Open file:" << outFileName << " failed! Exit..."; inFile.close(); return -1; } int len =0; while ( !(inFile>> len) ) { inFile.clear(); inFile.get(); } if ( len <=0 ) { inFile.close(); outFile.close(); cerr <<"Array length less or equal than zero! Exit..."; return -1; } int *a1 = new int[len]; int *a2 = new int[len]; int number=0, i=0; for ( i=0; i<len *2 && !inFile.eof(); i++ ) { while ( !(inFile>>number) && !inFile.eof() ); if ( i <len ) { a1[i]=number; } else { a2[i%len]=number; } } inFile.close(); if ( i< 2*len ) { cerr<<"Elements count not matched..."; outFile.close(); delete []a1; delete []a2; return -1; } int mid = GetMiddle( a1, a2, len); printf( "中间数: %d\n", mid ); outFile<<mid; outFile.close(); delete []a1; delete []a2; return 0;}
2.有两个链表[1,3,5],[2,4,7],设计一个算法将这两个链表合并为一个元素值递减的有序单向链表