//Charlotte Davies-Kiernan CS1A Chapter 8 P. 487 #3
//
/******************************************************************************
*
* Compute Lottery Winners
* ____________________________________________________________________________
* This program contains a lottery ticket buyer's same 10 5-dgit lucky
* combinations used when they buy 10 tickets a week. The program will display
* whether or not this week's winning 5-digit number matches with any of the
* lottery ticket buyer's lucky combinations.
* ____________________________________________________________________________
* Input
* SIZE : size of the array containing the lucky combinations
* tickets : array containing the 10 lucky combinations
* winningNumber : this week's winning number
* Output
* isWinner : true/false of whether or not the lucky combinations match
* the winning number
*****************************************************************************/
#include <iostream>
#include <iomanip>
using namespace std;
//Function Prototypes
void bubbleSort(int arr[], int size);
bool binarySearch(const int arr[], int size, int value);
int main() {
//Data Dictionary
const int SIZE = 10;
int tickets[SIZE] = {13579, 26791, 26792, 33445, 55555,
62483, 77777, 79422, 85647, 93121};
int winningNumber;
bool isWinner = false;
//User Input
cout << "Enter this week's 5-digit winning number: " << endl;
cin >> winningNumber;
//Input Validation
if(winningNumber < 10000 || winningNumber > 99999){
cout << "Error: Please enter a valid 5-digit number." << endl;
cin >> winningNumber;
return 1;
}
bubbleSort(tickets, SIZE);
//Perform Binary Search
isWinner = binarySearch(tickets, SIZE, winningNumber);
//Display Result
if(isWinner)
cout << "Congratulations! You have a winning ticket!" << endl;
else
cout << "Sorry, no winning tickets this week." << endl;
return 0;
}
//Bubble Sort Function
void bubbleSort(int arr[], int size){
bool swapped;
for(int i = 0; i < size - 1; i++){
swapped = false;
for(int j = 0; j < size - i - 1; j++){
if(arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if(!swapped)
break;
}
}
//Binary Search Function
bool binarySearch(const int arr[], int size, int value){
int first = 0;
int last = size - 1;
int middle;
while(first <= last) {
middle = (first + last) / 2;
if(arr[middle] == value)
return true;
else if(arr[middle] > value)
last = middle - 1;
else
first = middle + 1;
}
return false;
}
Ly9DaGFybG90dGUgRGF2aWVzLUtpZXJuYW4gICAgICAgICAgICAgIENTMUEgICAgICAgICAgICAgICBDaGFwdGVyIDggUC4gNDg3ICMzCi8vCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogCiAqIENvbXB1dGUgTG90dGVyeSBXaW5uZXJzCiAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICogVGhpcyBwcm9ncmFtIGNvbnRhaW5zIGEgbG90dGVyeSB0aWNrZXQgYnV5ZXIncyBzYW1lIDEwIDUtZGdpdCBsdWNreSAKICogY29tYmluYXRpb25zIHVzZWQgd2hlbiB0aGV5IGJ1eSAxMCB0aWNrZXRzIGEgd2Vlay4gVGhlIHByb2dyYW0gd2lsbCBkaXNwbGF5CiAqIHdoZXRoZXIgb3Igbm90IHRoaXMgd2VlaydzIHdpbm5pbmcgNS1kaWdpdCBudW1iZXIgbWF0Y2hlcyB3aXRoIGFueSBvZiB0aGUgCiAqIGxvdHRlcnkgdGlja2V0IGJ1eWVyJ3MgbHVja3kgY29tYmluYXRpb25zLgogKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAqIElucHV0CiAqICAgU0laRSAgICAgICAgICA6IHNpemUgb2YgdGhlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGx1Y2t5IGNvbWJpbmF0aW9ucwogKiAgIHRpY2tldHMgICAgICAgOiBhcnJheSBjb250YWluaW5nIHRoZSAxMCBsdWNreSBjb21iaW5hdGlvbnMgCiAqICAgd2lubmluZ051bWJlciA6IHRoaXMgd2VlaydzIHdpbm5pbmcgbnVtYmVyIAogKiBPdXRwdXQKICogICBpc1dpbm5lciAgICAgIDogdHJ1ZS9mYWxzZSBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgbHVja3kgY29tYmluYXRpb25zIG1hdGNoCiAqICAgICAgICAgICAgICAgICAgIHRoZSB3aW5uaW5nIG51bWJlcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGlvbWFuaXA+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vRnVuY3Rpb24gUHJvdG90eXBlcwp2b2lkIGJ1YmJsZVNvcnQoaW50IGFycltdLCBpbnQgc2l6ZSk7CmJvb2wgYmluYXJ5U2VhcmNoKGNvbnN0IGludCBhcnJbXSwgaW50IHNpemUsIGludCB2YWx1ZSk7CgppbnQgbWFpbigpIHsKLy9EYXRhIERpY3Rpb25hcnkKCWNvbnN0IGludCBTSVpFID0gMTA7CglpbnQgdGlja2V0c1tTSVpFXSA9IHsxMzU3OSwgMjY3OTEsIDI2NzkyLCAzMzQ0NSwgNTU1NTUsIAoJICAgICAgICAgICAgICAgICAgICAgNjI0ODMsIDc3Nzc3LCA3OTQyMiwgODU2NDcsIDkzMTIxfTsKCWludCB3aW5uaW5nTnVtYmVyOwoJYm9vbCBpc1dpbm5lciA9IGZhbHNlOwoJCi8vVXNlciBJbnB1dApjb3V0IDw8ICJFbnRlciB0aGlzIHdlZWsncyA1LWRpZ2l0IHdpbm5pbmcgbnVtYmVyOiAiIDw8IGVuZGw7CmNpbiA+PiB3aW5uaW5nTnVtYmVyOwoKLy9JbnB1dCBWYWxpZGF0aW9uCmlmKHdpbm5pbmdOdW1iZXIgPCAxMDAwMCB8fCB3aW5uaW5nTnVtYmVyID4gOTk5OTkpewoJY291dCA8PCAiRXJyb3I6IFBsZWFzZSBlbnRlciBhIHZhbGlkIDUtZGlnaXQgbnVtYmVyLiIgPDwgZW5kbDsKCWNpbiA+PiB3aW5uaW5nTnVtYmVyOwoJcmV0dXJuIDE7Cn0KYnViYmxlU29ydCh0aWNrZXRzLCBTSVpFKTsKCi8vUGVyZm9ybSBCaW5hcnkgU2VhcmNoCmlzV2lubmVyID0gYmluYXJ5U2VhcmNoKHRpY2tldHMsIFNJWkUsIHdpbm5pbmdOdW1iZXIpOwoKLy9EaXNwbGF5IFJlc3VsdAppZihpc1dpbm5lcikKICAgY291dCA8PCAiQ29uZ3JhdHVsYXRpb25zISBZb3UgaGF2ZSBhIHdpbm5pbmcgdGlja2V0ISIgPDwgZW5kbDsKZWxzZQogICBjb3V0IDw8ICJTb3JyeSwgbm8gd2lubmluZyB0aWNrZXRzIHRoaXMgd2Vlay4iIDw8IGVuZGw7CiAgIAoJcmV0dXJuIDA7Cn0KLy9CdWJibGUgU29ydCBGdW5jdGlvbgp2b2lkIGJ1YmJsZVNvcnQoaW50IGFycltdLCBpbnQgc2l6ZSl7Cglib29sIHN3YXBwZWQ7Cglmb3IoaW50IGkgPSAwOyBpIDwgc2l6ZSAtIDE7IGkrKyl7CgkJc3dhcHBlZCA9IGZhbHNlOwoJCWZvcihpbnQgaiA9IDA7IGogPCBzaXplIC0gaSAtIDE7IGorKyl7CgkJCWlmKGFycltqXSA+IGFycltqICsgMV0pewoJCQkJaW50IHRlbXAgPSBhcnJbal07CgkJCQlhcnJbal0gPSBhcnJbaiArIDFdOwoJCQkJYXJyW2ogKyAxXSA9IHRlbXA7CgkJCQlzd2FwcGVkID0gdHJ1ZTsKCQkJfQoJCX0KCQlpZighc3dhcHBlZCkKCQlicmVhazsKCX0KfQovL0JpbmFyeSBTZWFyY2ggRnVuY3Rpb24KYm9vbCBiaW5hcnlTZWFyY2goY29uc3QgaW50IGFycltdLCBpbnQgc2l6ZSwgaW50IHZhbHVlKXsKCWludCBmaXJzdCA9IDA7CglpbnQgbGFzdCA9IHNpemUgLSAxOwoJaW50IG1pZGRsZTsKCQoJd2hpbGUoZmlyc3QgPD0gbGFzdCkgewoJbWlkZGxlID0gKGZpcnN0ICsgbGFzdCkgLyAyOwoJaWYoYXJyW21pZGRsZV0gPT0gdmFsdWUpCgkJcmV0dXJuIHRydWU7CgllbHNlIGlmKGFyclttaWRkbGVdID4gdmFsdWUpCgkgICAgbGFzdCA9IG1pZGRsZSAtIDE7CgllbHNlCgkgICAgZmlyc3QgPSBtaWRkbGUgKyAxOwogICAgfQpyZXR1cm4gZmFsc2U7Cn0=