You’re at a grocery store:

PROBLEM

  1. Your bag can hold ten pounds.
  2. You have $100
  3. You need about 2000 calories a day, so a weekly shopping trip is about 14,000 calories.
  4. You must purchase at least 4 ounces of each grocery item and can buy in 4 ounce increments.

CONSTRAINTS
— Calories Per Pound —
Ham, 650 cals
Lettuce, 70 cals
Cheese, 1670 cals
Tuna, 830 cals
Bread, 1300 cals

— Price Per Pound —
Ham, $4
Lettuce, $1.5
Cheese, $5
Tuna, $20
Bread, $1.20

CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#define MAX_BASKET_WEIGHT 160.0f
#define MIN_CALORIES 14000.0f
#define MAX_PRICE 100.0f
#define HAM_CALS (650.0f/16.0f)
#define LETTUCE_CALS (70.0f/16.0f)
#define CHEESE_CALS (1670.0f/16.0f)
#define TUNA_CALS (830.0f/16.0f)
#define BREAD_CALS (1300.0f/16.0f)
#define HAM_PRICE (4.0f/16.0f)
#define LETTUCE_PRICE (1.50f/16.0f)
#define CHEESE_PRICE (5.0f/16.0f)
#define TUNA_PRICE (20.0f/16.0f)
#define BREAD_PRICE (1.20f/16.0f)
float getWeight(float fHam, float fLettuce, float fCheese, float fTuna, float fBread) {
return (fHam + fLettuce + fCheese + fTuna + fBread);
}
float getCalories(float fHam, float fLettuce, float fCheese, float fTuna, float fBread) {
return ((HAM_CALS * fHam) + (LETTUCE_CALS * fLettuce) + (CHEESE_CALS * fCheese)
+ (TUNA_CALS * fTuna) + (BREAD_CALS * fBread));
}
float getPrice(float fHam, float fLettuce, float fCheese, float fTuna, float fBread) {
return ((HAM_PRICE * fHam) + (LETTUCE_PRICE * fLettuce) + (CHEESE_PRICE * fCheese)
+ (TUNA_PRICE * fTuna) + (BREAD_PRICE * fBread));
}
void printBasket(float fHam, float fLettuce, float fCheese, float fTuna, float fBread) {
std::cout << "Valid Basket: Ham (" << fHam/16.0f
<< "), Lettuce (" << fLettuce/16.0f
<< "), Cheese (" << fCheese/16.0f
<< "), Tuna (" << fTuna/16.0f
<< "), Bread (" << fBread/16.0f << "), "
<< "Price: " << getPrice(fHam, fLettuce, fCheese, fTuna, fBread) << ", "
<< "Weight: " << getWeight(fHam, fLettuce, fCheese, fTuna, fBread) << ", "
<< "Calories: " << getCalories(fHam, fLettuce, fCheese, fTuna, fBread) << "\n";
}
int main(){
int nValidBasket = 0;
float nMinBuyUnit = 4.0f;
for (float fHam = 4.0f; fHam <= MAX_BASKET_WEIGHT; fHam += nMinBuyUnit) {
for (float fLettuce = 4.0f; fLettuce <= (MAX_BASKET_WEIGHT - fHam); fLettuce += nMinBuyUnit) {
for (float fCheese = 4.0f; fCheese <= (MAX_BASKET_WEIGHT - fHam - fLettuce); fCheese += nMinBuyUnit) {
for (float fTuna = 4.0f; fTuna <= (MAX_BASKET_WEIGHT - fHam - fLettuce - fCheese); fTuna += nMinBuyUnit) {
for (float fBread = 4.0f; fBread <= (MAX_BASKET_WEIGHT - fHam - fLettuce - fCheese - fTuna); fBread += nMinBuyUnit) {
if ((getWeight(fHam, fLettuce, fCheese, fTuna, fBread) <= MAX_BASKET_WEIGHT) &&
(getCalories(fHam, fLettuce, fCheese, fTuna, fBread) >= MIN_CALORIES) &&
(getPrice(fHam, fLettuce, fCheese, fTuna, fBread) <= MAX_PRICE)) {
++nValidBasket;
printBasket(fHam, fLettuce, fCheese, fTuna, fBread);
}
}
}
}
}
}
std::cout << "Total number of baskets: " << nValidBasket << "\n";
return 0;
}