No plagiarism involved since this part is not marked anyways, and the announcement was sent right after I finished the code.
#include <iostream>
#include <vector>
std::vector<unsigned> testArray = {7,4,2,3,5};
unsigned testNum = 28;
void merge (std::vector<unsigned> &array, unsigned l, unsigned m, unsigned r){
    unsigned lSize = m-l+1;
    unsigned rSize = r-m;
   unsigned leftArray [lSize];
   unsigned rightArray [rSize];
   for(unsigned i=0;i<lSize;i++){
      leftArray[i] = array[l+i];
   }
   for(unsigned j=0;j<rSize;j++){
      rightArray[j] = array[m+1+j];
   }
   unsigned i = 0;
   unsigned j = 0;
   unsigned k = l;
   while(i<lSize && j<rSize){
      if(leftArray[i]<rightArray[j]){
         array[k] = leftArray[i];
         i++;
      } else{
         array[k] = rightArray[j];
         j++;
      }
      k++;
   }
   while(i<lSize){
      array[k] = leftArray[i];
      i++;
      k++;
   }
   while(j<rSize){
      array[k] = rightArray[j];
      j++;
      k++;
   }
}
void mergeSort (std::vector<unsigned> &array, int l, int r){
   if(l<r){
      int m  = (l+r)/2;
      mergeSort(array,l,m);
      mergeSort(array,m+1,r);
      merge(array,l,m,r);
   }
}
void printArray(const std::vector<unsigned> &array){
    std::cout<<"{";
    size_t arraySize = array.size();
    for(unsigned i=0;i<arraySize;i++){
        std::cout<<array[i]<<",";
    }
    std::cout<<"}"<<std::endl;
}
bool findIfFormProduct(const std::vector<unsigned>& array, unsigned num){
    unsigned arraySize = array.size();
    int r = arraySize - 1;
    for(unsigned i = 0; i<arraySize;i++){
        int l = i;
        int m = (l+r)/2;
        while(l<=r){
            int product = array[i]*array[m];
            if(product==num){
                return true;
            } else if(product<num){ // search right
                l = m + 1;
            } else{ // search left
                r = m - 1;
            }
            m = (l+r)/2;
        }
    }
    return false;
}
int main() {
    std::cout<<"The array before sorting is ";
    printArray(testArray);
    mergeSort(testArray,0,testArray.size()-1);
    std::cout<<"The array after sorting is ";
    printArray(testArray);
    std::cout<<"The result is "<<(findIfFormProduct(testArray,testNum)?1:0)<<std::endl;
    return 0;
}
0 条评论