//Ryan Robateau CSC5 Chapter 8, p. 487, #3
//
/*******************************************************************************
*
* Determine Winning Numbers (Binary Search Edition)
* _____________________________________________________________________________
* This program will prompt the user to enter 5 number for the lottery. The
* program will then call a function to verify of the numbers entered by the
* user are wining numbers. If the numbers are winning numbers then the program
* will then congradulate the user, if not then the program will tell the user
* that they go it wrong.
* _____________________________________________________________________________
******************************************************************************/
#include <iostream>
#include <iomanip>
using namespace std;
float binarySearch(float lotteryNums[], int size, int user);
int main()
{
const int SIZE = 10;
float luckNums[SIZE] = {13579, 26791, 26792,
33445, 55555, 62483,
77777, 79422, 85647,
93121};
float userNums;
int match;
cout << "Hello Welcome To The Lottery" << endl;
cout << "Please Enter 5 Numbers: " << endl;
cin >> userNums;
match = binarySearch(luckNums, SIZE, userNums);
if( match == -1)
{
cout << "UNLUCKY!" << endl;
cout << "Not Winning Numbers" << endl;
}
else
{
cout << "CONGRATS!" << endl;
cout << "You Entered Winning Numbers" << endl;
}
return 0;
}
float binarySearch(float lotteryNums[], int size, int user)
{
int first;
int last = size - 1;
int middle;
int position = -1;
bool found = false;
while(!found && first <= last)
{
middle = (first + last) / 2;
if(lotteryNums[middle] == user)
{
found = true;
position = middle;
}
else if(lotteryNums[middle] > user)
{
last = middle - 1;
}
else
{
first = middle + 1;
}
}
return position;
}
Ly9SeWFuIFJvYmF0ZWF1CSAgICAgICAgICAgICAgICAgICAgQ1NDNSAgICAgICAgICAgICAgICAgICBDaGFwdGVyIDgsIHAuIDQ4NywgIzMKLy8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogRGV0ZXJtaW5lIFdpbm5pbmcgTnVtYmVycyAoQmluYXJ5IFNlYXJjaCBFZGl0aW9uKQogKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogKiBUaGlzIHByb2dyYW0gd2lsbCBwcm9tcHQgdGhlIHVzZXIgdG8gZW50ZXIgNSBudW1iZXIgZm9yIHRoZSBsb3R0ZXJ5LiBUaGUKICogcHJvZ3JhbSB3aWxsIHRoZW4gY2FsbCBhIGZ1bmN0aW9uIHRvIHZlcmlmeSBvZiB0aGUgbnVtYmVycyBlbnRlcmVkIGJ5IHRoZSAKICogdXNlciBhcmUgd2luaW5nIG51bWJlcnMuIElmIHRoZSBudW1iZXJzIGFyZSB3aW5uaW5nIG51bWJlcnMgdGhlbiB0aGUgcHJvZ3JhbSAKICogd2lsbCB0aGVuIGNvbmdyYWR1bGF0ZSB0aGUgdXNlciwgaWYgbm90IHRoZW4gdGhlIHByb2dyYW0gd2lsbCB0ZWxsIHRoZSB1c2VyIAogKiB0aGF0IHRoZXkgZ28gaXQgd3JvbmcuCiAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGlvbWFuaXA+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpmbG9hdCBiaW5hcnlTZWFyY2goZmxvYXQgbG90dGVyeU51bXNbXSwgaW50IHNpemUsIGludCB1c2VyKTsKIAppbnQgbWFpbigpCnsKICAgIGNvbnN0IGludCBTSVpFID0gMTA7CiAgICBmbG9hdCBsdWNrTnVtc1tTSVpFXSA9IHsxMzU3OSwgMjY3OTEsIDI2NzkyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM0NDUsIDU1NTU1LCA2MjQ4MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc3Nzc3LCA3OTQyMiwgODU2NDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MzEyMX07CiAgICBmbG9hdCB1c2VyTnVtczsKICAgIGludCBtYXRjaDsKIAogICAgY291dCA8PCAiSGVsbG8gV2VsY29tZSBUbyBUaGUgTG90dGVyeSIgPDwgZW5kbDsKICAgIGNvdXQgPDwgIlBsZWFzZSBFbnRlciA1IE51bWJlcnM6ICIgPDwgZW5kbDsKICAgIGNpbiA+PiB1c2VyTnVtczsKIAogICAgbWF0Y2ggPSBiaW5hcnlTZWFyY2gobHVja051bXMsIFNJWkUsIHVzZXJOdW1zKTsKIAogICAgaWYoIG1hdGNoID09IC0xKQogICAgewogICAgICAgIGNvdXQgPDwgIlVOTFVDS1khIiA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgIk5vdCBXaW5uaW5nIE51bWJlcnMiIDw8IGVuZGw7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgY291dCA8PCAiQ09OR1JBVFMhIiA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgIllvdSBFbnRlcmVkIFdpbm5pbmcgTnVtYmVycyIgPDwgZW5kbDsKIAogICAgfQogCiAgICByZXR1cm4gMDsKfQogCmZsb2F0IGJpbmFyeVNlYXJjaChmbG9hdCBsb3R0ZXJ5TnVtc1tdLCBpbnQgc2l6ZSwgaW50IHVzZXIpCnsKICAgaW50IGZpcnN0OwogICBpbnQgbGFzdCA9IHNpemUgLSAxOwogICBpbnQgbWlkZGxlOwogICBpbnQgcG9zaXRpb24gPSAtMTsKICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogCiAgIHdoaWxlKCFmb3VuZCAmJiBmaXJzdCA8PSBsYXN0KQogICB7CiAgICAgICAgbWlkZGxlID0gKGZpcnN0ICsgbGFzdCkgLyAyOwogICAgICAgIGlmKGxvdHRlcnlOdW1zW21pZGRsZV0gPT0gdXNlcikKICAgICAgICB7CiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgcG9zaXRpb24gPSBtaWRkbGU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYobG90dGVyeU51bXNbbWlkZGxlXSA+IHVzZXIpCiAgICAgICAgewogICAgICAgICAgICBsYXN0ID0gbWlkZGxlIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSAKICAgICAgICB7CiAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKICAgICAgICB9CiAgIH0KICAgIHJldHVybiBwb3NpdGlvbjsKfQ==