The above is the question and the code below is the answer. I'm trying to understand the checking part where they checked to see where the max product is and discards the rest of the directional checks to come up with the answer. If somebody can, can somebody walk through each check. Thanks.
#include <iostream>
using std::cout;
using std::endl;
const int H = 20;
const int W = 20;
const int CONSECUTIVE = 4;
const int GRID[H][W] =
{{8, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 8},
{49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00},
{81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65},
{52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91},
{22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80},
{24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50},
{32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70},
{67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21},
{24, 55, 58, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72},
{21, 36, 23, 9, 75, 00, 76, 44, 20, 45, 35, 14, 00, 61, 33, 97, 34, 31, 33, 95},
{78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 03, 80, 04, 62, 16, 14, 9, 53, 56, 92},
{16, 39, 05, 42, 96, 35, 31, 47, 55, 58, 88, 24, 00, 17, 54, 24, 36, 29, 85, 57},
{86, 56, 00, 48, 35, 71, 89, 07, 05, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58},
{19, 80, 81, 68, 05, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 04, 89, 55, 40},
{04, 52, 8, 83, 97, 35, 99, 16, 07, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66},
{88, 36, 68, 87, 57, 62, 20, 72, 03, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69},
{04, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36},
{20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 04, 36, 16},
{20, 73, 35, 29, 78, 31, 90, 01, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 05, 54},
{01, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 01, 89, 19, 67, 48}};
int main()
{
int max = 0, temp_max = 0, max_x = 0, max_y = 0;
std::string direction = "";
for (int i = 0; i < H; i++){
for (int j = 0; j < W; j++){
//Check right
if (j < (W - CONSECUTIVE)){
temp_max = 1;
for (int k = 0; k < CONSECUTIVE; k++){
temp_max *= GRID[i][j+k];
}
if (temp_max > max){
max = temp_max;
max_x = j;
max_y = i;
direction = "right";
}
}
// Check down
if (i < (W - CONSECUTIVE)){
temp_max = 1;
for (int k = 0; k < CONSECUTIVE; k++){
temp_max *= GRID[i+k][j];
}
if (temp_max > max){
max = temp_max;
max_x = j;
max_y = i;
direction = "down";
}
}
//Check down-right
if ((i < (H - CONSECUTIVE)) && (j < (W - CONSECUTIVE))){
temp_max = 1;
for (int k = 0; k < CONSECUTIVE; k++){
temp_max *= GRID[i+k][j+k];
}
if (temp_max > max){
max = temp_max;
max_x = j;
max_y = i;
direction = "diagonal down right";
}
}
//Check up-right
if ((i > CONSECUTIVE) && (j < (W - CONSECUTIVE))){
temp_max = 1;
for (int k = 0; k < CONSECUTIVE; k++){
temp_max *= GRID[i-k][j+k];
}
if (temp_max > max){
max = temp_max;
max_x = j;
max_y = i;
direction = "diagonal up right";
}
}
}
}
cout << "Max product was " << max << " at (" << max_x << "," << max_y << ") ";
cout << "in direction " << direction << endl;
return 0;
}

New Topic/Question
Reply



MultiQuote




|