//Amari Mosley CSC5 Chapter 8, P. 487, #3
/*******************************************************************************
*
* BNARY SEARCH LOTTERY WINNERS
* ______________________________________________________________________________
*
* This program initializes an array with a lottery ticket buyer's
* 10 lucky 5-digit combinations, lets the player enter this week's
* winning 5-digit number, and performs a binary search to report
* whether or not one of the tickets is a winner.
*
*
* ______________________________________________________________________________
*
*
* INPUT
* winningNumber : The 5-digit winning number entered by the user
* OUTPUT
* resultMessage : Indicates whether the ticket is a winner or not
*
*
********************************************************************************/
#include <iostream>
using namespace std;
int main ()
{
// Constants
const int NUM_TICKETS = 10;
// INPUT
int winningNumber;
// Initialize Program variables
int tickets[NUM_TICKETS] = { 13579, 26791, 26792, 33445, 55555,
62483, 77777, 79422, 85647, 93121 };
int first = 0;
int last = NUM_TICKETS - 1;
int middle;
bool found = false;
// Get this week's winning 5-digit number from the user
cout << "Enter this week's 5-digit winning number: ";
cin >> winningNumber;
// Search the array for the winning number using binary search
while (!found && first <= last)
{
middle = (first + last) / 2;
if (tickets[middle] == winningNumber)
{
found = true;
}
else if (tickets[middle] > winningNumber)
{
last = middle - 1;
}
else
{
first = middle + 1;
}
}
// Output Result
if (found)
{
cout << "Congratulations! You have a winning ticket!" << endl;
}
else
{
cout << "Sorry, none of your tickets are winners this week." << endl;
}
return 0;
}
Ly9BbWFyaSBNb3NsZXkgQ1NDNSBDaGFwdGVyIDgsIFAuIDQ4NywgIzMKIAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogQk5BUlkgU0VBUkNIIExPVFRFUlkgV0lOTkVSUwoqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwoqCiogVGhpcyBwcm9ncmFtIGluaXRpYWxpemVzIGFuIGFycmF5IHdpdGggYSBsb3R0ZXJ5IHRpY2tldCBidXllcidzIAoqIDEwIGx1Y2t5IDUtZGlnaXQgY29tYmluYXRpb25zLCBsZXRzIHRoZSBwbGF5ZXIgZW50ZXIgdGhpcyB3ZWVrJ3MgCiogd2lubmluZyA1LWRpZ2l0IG51bWJlciwgYW5kIHBlcmZvcm1zIGEgYmluYXJ5IHNlYXJjaCB0byByZXBvcnQgCiogd2hldGhlciBvciBub3Qgb25lIG9mIHRoZSB0aWNrZXRzIGlzIGEgd2lubmVyLgoqCioKKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKgoqCiogSU5QVVQKKgkJd2lubmluZ051bWJlciAgICAgICA6IFRoZSA1LWRpZ2l0IHdpbm5pbmcgbnVtYmVyIGVudGVyZWQgYnkgdGhlIHVzZXIKKiBPVVRQVVQKKgkJcmVzdWx0TWVzc2FnZSAgICAgICA6IEluZGljYXRlcyB3aGV0aGVyIHRoZSB0aWNrZXQgaXMgYSB3aW5uZXIgb3Igbm90CioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbWFpbiAoKQp7CiAgICAvLyBDb25zdGFudHMKICAgIGNvbnN0IGludCBOVU1fVElDS0VUUyA9IDEwOwogICAgCiAgICAvLyBJTlBVVAogICAgaW50IHdpbm5pbmdOdW1iZXI7CiAgICAKICAgIC8vIEluaXRpYWxpemUgUHJvZ3JhbSB2YXJpYWJsZXMKICAgIGludCB0aWNrZXRzW05VTV9USUNLRVRTXSA9IHsgMTM1NzksIDI2NzkxLCAyNjc5MiwgMzM0NDUsIDU1NTU1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MjQ4MywgNzc3NzcsIDc5NDIyLCA4NTY0NywgOTMxMjEgfTsKICAgIGludCBmaXJzdCA9IDA7CiAgICBpbnQgbGFzdCA9IE5VTV9USUNLRVRTIC0gMTsKICAgIGludCBtaWRkbGU7CiAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAKICAgIC8vIEdldCB0aGlzIHdlZWsncyB3aW5uaW5nIDUtZGlnaXQgbnVtYmVyIGZyb20gdGhlIHVzZXIKICAgIGNvdXQgPDwgIkVudGVyIHRoaXMgd2VlaydzIDUtZGlnaXQgd2lubmluZyBudW1iZXI6ICI7CiAgICBjaW4gPj4gd2lubmluZ051bWJlcjsKICAgIAogICAgLy8gU2VhcmNoIHRoZSBhcnJheSBmb3IgdGhlIHdpbm5pbmcgbnVtYmVyIHVzaW5nIGJpbmFyeSBzZWFyY2gKICAgIHdoaWxlICghZm91bmQgJiYgZmlyc3QgPD0gbGFzdCkKICAgIHsKICAgICAgICBtaWRkbGUgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CiAgICAgICAgaWYgKHRpY2tldHNbbWlkZGxlXSA9PSB3aW5uaW5nTnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0aWNrZXRzW21pZGRsZV0gPiB3aW5uaW5nTnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgbGFzdCA9IG1pZGRsZSAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIE91dHB1dCBSZXN1bHQKICAgIGlmIChmb3VuZCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJDb25ncmF0dWxhdGlvbnMhIFlvdSBoYXZlIGEgd2lubmluZyB0aWNrZXQhIiA8PCBlbmRsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGNvdXQgPDwgIlNvcnJ5LCBub25lIG9mIHlvdXIgdGlja2V0cyBhcmUgd2lubmVycyB0aGlzIHdlZWsuIiA8PCBlbmRsOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQ==