Euler_31.cpp (1035B)
1 #include "Euler.h" 2 3 int coins[8] = {200, 100, 50, 20, 10, 5, 2, 1}; 4 5 int coinSumRecurse(int money, int maxcoin) 6 { 7 int sum = 0; 8 9 if(maxcoin == 7) 10 return 1; 11 12 for(int i = maxcoin; i < 8; i++) 13 { 14 if (money - coins[i] == 0) 15 ++sum; 16 if (money - coins[i] > 0) 17 sum += coinSumRecurse(money - coins[i], i); 18 } 19 20 return sum; 21 } 22 23 int Euler::CoinSums() 24 { 25 return coinSumRecurse(200, 0); 26 } 27 28 //int Euler::CoinSums() //original solution 29 //{ 30 // int sum = 0; 31 // 32 // for (int a = 0; a <= 200; ++a) 33 // for (int b = 0; b <= 100; ++b) 34 // for (int c = 0; c <= 40; ++c) 35 // for (int d = 0; d <= 20; ++d) 36 // for (int e = 0; e <= 10; ++e) 37 // for (int f = 0; f <= 5; ++f) 38 // for (int g = 0; g <= 2; ++g) 39 // if (a + b * 2 + c * 5 + d * 10 + e * 20 + f * 50 + g * 100 == 200) 40 // ++sum; 41 // 42 // return sum + 1; 43 //}