ptmdmusique icon

CLB_CodingChallenge_23_3_2018

ptmdmusique | PRO | 03/23/18 07:42:39 PM UTC | 0 ⭐ | 308 👁️ | Never ⏰ | []
C++ |

1.46 KB

|

None

|

0 👍

/

0 👎

/*Problem description
    Given a collection of number and sums, determine whether there is a pair of numbers that sums up to the given sum
    Print out "True" or "False" as the result
*/
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
 
int main() {
/*Test file name: in.txt
Test file explain:
    n m
    i1 i2 i3 ... in
    j1 j2 j3 ... jm
    
Where:
    n               : number of numbers in the array
    m               : number of "sum" we need to find
    ik (1 <= k <= n): elements in the array
    jk'(1 <= k'<= m): the sums we need to find
 
Sample:     
    7 9
    2 3 4 5 7 8 20
    10 19 100 5 9 10 9 22 29
*/
    //Read from file
    ifstream inFile("in.txt");
    int numOfItem = 0, findVal = 0, numToFind = 0;
 
    inFile >> numOfItem >> numToFind;   //Read in important values
    vector<int> value(numOfItem);   //Create a container based on given size
    //Read in array values
    for (int indx = 0; indx < numOfItem; indx++) {
        inFile >> value[indx];
    }
        
    for (int indx = 0; indx < numToFind; indx++) {
        inFile >> findVal;
        bool found = false;
        for (unsigned int lowIndx = 0, highIndx = value.size() - 1; lowIndx < highIndx;) {
            int curVal = value[lowIndx] + value[highIndx];
            if (curVal == findVal) {
                //Found :D 
                found = true;
                break;
            }
            if (curVal > findVal) {
                //Too big
                highIndx--;
            }
            else {
                //Too small
                lowIndx++;
            }
        }
 
        //Output appropriately
        cout << (found == true ? "True" : "False") << endl;
    }
 
    return 0;
}

Comments