#include <stdio.h>
#define RACES 10
// Structures
struct raceResult
{
int raceNumber;
int winningHorseNumber;
int placeHorseNumber;
int showHorseNumber;
} ;
struct raceWager
{
int raceNumber;
int myHorseNumber;
float myBetAmount;
char betType; // 'W', 'P', or 'S'
} ;
// Function prototype
float myHorseBet( struct raceWager myBet, struct raceResult theDailyResults[ ] ) ;
// Function definition
float myHorseBet( struct raceWager myBet, struct raceResult theDailyResults[ ] )
{
if ( myBet.raceNumber < 1 || myBet.raceNumber > RACES)
{
return 0.0 ;
}
if ( myBet.myHorseNumber < 1 || myBet.myHorseNumber > 20 )
{
return 0.0 ;
}
if ( myBet.myBetAmount < 5.0 || myBet.myBetAmount > 1000.0 )
{
return 0.0 ;
}
if ( myBet.betType != 'W' && myBet.betType != 'P' && myBet.betType != 'S' )
{
return 0.0 ;
}
struct raceResult result = theDailyResults[ myBet.raceNumber - 1 ] ;
if ( myBet.betType == 'W' )
{
if ( myBet.myHorseNumber == result.winningHorseNumber )
{
return myBet.myBetAmount * 10.0 ;
}
}
else if ( myBet.betType == 'P' )
{
if ( myBet.myHorseNumber == result.winningHorseNumber ||
myBet.myHorseNumber == result.placeHorseNumber )
{
return myBet.myBetAmount * 5.0 ;
}
}
else if ( myBet.betType == 'S' )
{
if ( myBet.myHorseNumber == result.winningHorseNumber ||
myBet.myHorseNumber == result.placeHorseNumber ||
myBet.myHorseNumber == result.showHorseNumber )
{
return myBet.myBetAmount * 3.0 ;
}
}
return 0.0 ;
}
// Main function for testing
int main( ) {
struct raceResult theDailyResults[ RACES] = {
{ 1 , 5 , 12 , 7 } ,
{ 2 , 3 , 14 , 9 } ,
{ 3 , 1 , 4 , 10 } ,
{ 4 , 6 , 8 , 2 } ,
{ 5 , 13 , 15 , 1 } ,
{ 6 , 2 , 5 , 3 } ,
{ 7 , 10 , 6 , 8 } ,
{ 8 , 7 , 2 , 4 } ,
{ 9 , 20 , 19 , 18 } ,
{ 10 , 9 , 1 , 6 }
} ;
struct raceWager myBets[ ] = {
{ 1 , 5 , 10.0 , 'W' } , // Winning horse
{ 2 , 14 , 20.0 , 'P' } , // Placing horse
{ 3 , 10 , 5.0 , 'S' } , // Show horse
{ 4 , 11 , 50.0 , 'W' } , // Not placed
{ 10 , 1 , 5.0 , 'S' } // Show horse
} ;
int numBets = sizeof ( myBets) / sizeof ( myBets[ 0 ] ) ;
for ( int i = 0 ; i < numBets; i++ ) {
float winnings = myHorseBet( myBets[ i] , theDailyResults) ;
printf ( "Bet %d: Race %d, Horse %d, Bet $%.2f, Type %c => Winnings: $%.2f\n " , i + 1 ,
myBets[ i] .raceNumber ,
myBets[ i] .myHorseNumber ,
myBets[ i] .myBetAmount ,
myBets[ i] .betType ,
winnings) ;
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFJBQ0VTIDEwCgovLyBTdHJ1Y3R1cmVzCnN0cnVjdCByYWNlUmVzdWx0IAp7CiAgICBpbnQgcmFjZU51bWJlcjsKICAgIGludCB3aW5uaW5nSG9yc2VOdW1iZXI7CiAgICBpbnQgcGxhY2VIb3JzZU51bWJlcjsKICAgIGludCBzaG93SG9yc2VOdW1iZXI7Cn07CgpzdHJ1Y3QgcmFjZVdhZ2VyIAp7CiAgICBpbnQgcmFjZU51bWJlcjsKICAgIGludCBteUhvcnNlTnVtYmVyOwogICAgZmxvYXQgbXlCZXRBbW91bnQ7CiAgICBjaGFyIGJldFR5cGU7ICAvLyAnVycsICdQJywgb3IgJ1MnCn07CgovLyBGdW5jdGlvbiBwcm90b3R5cGUKZmxvYXQgbXlIb3JzZUJldChzdHJ1Y3QgcmFjZVdhZ2VyIG15QmV0LCBzdHJ1Y3QgcmFjZVJlc3VsdCB0aGVEYWlseVJlc3VsdHNbXSk7CgovLyBGdW5jdGlvbiBkZWZpbml0aW9uCmZsb2F0IG15SG9yc2VCZXQoc3RydWN0IHJhY2VXYWdlciBteUJldCwgc3RydWN0IHJhY2VSZXN1bHQgdGhlRGFpbHlSZXN1bHRzW10pIAp7CiAgICBpZiAobXlCZXQucmFjZU51bWJlciA8IDEgfHwgbXlCZXQucmFjZU51bWJlciA+IFJBQ0VTKQogICAgewogICAgICAgIHJldHVybiAwLjA7CiAgICB9CiAgICAKICAgIGlmIChteUJldC5teUhvcnNlTnVtYmVyIDwgMSB8fCBteUJldC5teUhvcnNlTnVtYmVyID4gMjApCiAgICB7CiAgICAgICAgcmV0dXJuIDAuMDsKICAgIH0KICAgIAogICAgaWYgKG15QmV0Lm15QmV0QW1vdW50IDwgNS4wIHx8IG15QmV0Lm15QmV0QW1vdW50ID4gMTAwMC4wKQogICAgewogICAgICAgIHJldHVybiAwLjA7CiAgICB9CiAgICAKICAgIGlmIChteUJldC5iZXRUeXBlICE9ICdXJyAmJiBteUJldC5iZXRUeXBlICE9ICdQJyAmJiBteUJldC5iZXRUeXBlICE9ICdTJykKICAgIHsKICAgICAgICByZXR1cm4gMC4wOwogICAgfQoKICAgIHN0cnVjdCByYWNlUmVzdWx0IHJlc3VsdCA9IHRoZURhaWx5UmVzdWx0c1tteUJldC5yYWNlTnVtYmVyIC0gMV07CgogICAgaWYgKG15QmV0LmJldFR5cGUgPT0gJ1cnKSAKICAgIHsKICAgICAgICBpZiAobXlCZXQubXlIb3JzZU51bWJlciA9PSByZXN1bHQud2lubmluZ0hvcnNlTnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICByZXR1cm4gbXlCZXQubXlCZXRBbW91bnQgKiAxMC4wOwogICAgICAgIH0KICAgIH0gCiAgICBlbHNlIGlmIChteUJldC5iZXRUeXBlID09ICdQJykgCiAgICB7CiAgICAgICAgaWYgKG15QmV0Lm15SG9yc2VOdW1iZXIgPT0gcmVzdWx0Lndpbm5pbmdIb3JzZU51bWJlciB8fAogICAgICAgICAgICBteUJldC5teUhvcnNlTnVtYmVyID09IHJlc3VsdC5wbGFjZUhvcnNlTnVtYmVyKQogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBteUJldC5teUJldEFtb3VudCAqIDUuMDsKICAgICAgICAgICAgfQogICAgfSAKICAgIGVsc2UgaWYgKG15QmV0LmJldFR5cGUgPT0gJ1MnKSAKICAgIHsKICAgICAgICBpZiAobXlCZXQubXlIb3JzZU51bWJlciA9PSByZXN1bHQud2lubmluZ0hvcnNlTnVtYmVyIHx8CiAgICAgICAgICAgIG15QmV0Lm15SG9yc2VOdW1iZXIgPT0gcmVzdWx0LnBsYWNlSG9yc2VOdW1iZXIgfHwKICAgICAgICAgICAgbXlCZXQubXlIb3JzZU51bWJlciA9PSByZXN1bHQuc2hvd0hvcnNlTnVtYmVyKQogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBteUJldC5teUJldEFtb3VudCAqIDMuMDsKICAgICAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwLjA7Cn0KCi8vIE1haW4gZnVuY3Rpb24gZm9yIHRlc3RpbmcKaW50IG1haW4oKSB7CiAgICBzdHJ1Y3QgcmFjZVJlc3VsdCB0aGVEYWlseVJlc3VsdHNbUkFDRVNdID0gewogICAgICAgIHsxLCA1LCAxMiwgN30sCiAgICAgICAgezIsIDMsIDE0LCA5fSwKICAgICAgICB7MywgMSwgNCwgMTB9LAogICAgICAgIHs0LCA2LCA4LCAyfSwKICAgICAgICB7NSwgMTMsIDE1LCAxfSwKICAgICAgICB7NiwgMiwgNSwgM30sCiAgICAgICAgezcsIDEwLCA2LCA4fSwKICAgICAgICB7OCwgNywgMiwgNH0sCiAgICAgICAgezksIDIwLCAxOSwgMTh9LAogICAgICAgIHsxMCwgOSwgMSwgNn0KICAgIH07CgogICAgc3RydWN0IHJhY2VXYWdlciBteUJldHNbXSA9IHsKICAgICAgICB7MSwgNSwgMTAuMCwgJ1cnfSwgIC8vIFdpbm5pbmcgaG9yc2UKICAgICAgICB7MiwgMTQsIDIwLjAsICdQJ30sIC8vIFBsYWNpbmcgaG9yc2UKICAgICAgICB7MywgMTAsIDUuMCwgJ1MnfSwgIC8vIFNob3cgaG9yc2UKICAgICAgICB7NCwgMTEsIDUwLjAsICdXJ30sIC8vIE5vdCBwbGFjZWQKICAgICAgICB7MTAsIDEsIDUuMCwgJ1MnfSAgIC8vIFNob3cgaG9yc2UKICAgIH07CgogICAgaW50IG51bUJldHMgPSBzaXplb2YobXlCZXRzKSAvIHNpemVvZihteUJldHNbMF0pOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQmV0czsgaSsrKSB7CiAgICAgICAgZmxvYXQgd2lubmluZ3MgPSBteUhvcnNlQmV0KG15QmV0c1tpXSwgdGhlRGFpbHlSZXN1bHRzKTsKICAgICAgICBwcmludGYoIkJldCAlZDogUmFjZSAlZCwgSG9yc2UgJWQsIEJldCAkJS4yZiwgVHlwZSAlYyA9PiBXaW5uaW5nczogJCUuMmZcbiIsCiAgICAgICAgICAgICAgIGkgKyAxLAogICAgICAgICAgICAgICBteUJldHNbaV0ucmFjZU51bWJlciwKICAgICAgICAgICAgICAgbXlCZXRzW2ldLm15SG9yc2VOdW1iZXIsCiAgICAgICAgICAgICAgIG15QmV0c1tpXS5teUJldEFtb3VudCwKICAgICAgICAgICAgICAgbXlCZXRzW2ldLmJldFR5cGUsCiAgICAgICAgICAgICAgIHdpbm5pbmdzKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==