Code:
#include <stdio.h>
#include <stdlib.h>
long int GetBiggest( long int, long int );
int main()
{
//declare variables
const int iGrid[20][20] = {
{ 8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8 }, //row 0
{ 49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0 }, //row 1
{ 81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65 }, //row 2
{ 52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91 }, //row 3
{ 22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80 }, //row 4
{ 24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50 }, //row 5
{ 32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70 }, //row 6
{ 67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21 }, //row 7
{ 24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72 }, //row 8
{ 21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95 }, //row 9
{ 78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92 }, //row 10
{ 16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57 }, //row 11
{ 86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58 }, //row 12
{ 19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40 }, //row 13
{ 4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66 }, //row 14
{ 88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69 }, //row 15
{ 4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36 }, //row 16
{ 20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16 }, //row 17
{ 20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54 }, //row 18
{ 1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48 }}; //row 19
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
int iRow, iCollum;
long int iMaxHorandVer = 0, iMaxDiagonal = 0, iBiggestTotal = 0;
long int iVertical = 1, iMaxVertical = 0, iHorizontal = 1, iMaxHorizontal = 0;
long int iLDiagonal = 1, iLMaxDiagonal = 0, iRDiagonal = 1, iRMaxDiagonal = 0;
for ( iRow = 0; iRow < 20; iRow++ )
{
for ( iCollum = 0; iCollum < 20; iCollum++ )
{
//down
if ( iRow < 17 )
//calculate ivertical downwards (no need to go up as its allready calculated when irow was 3 less)
{
iVertical = iGrid[ iRow ][ iCollum ] * iGrid[ iRow ][ iCollum + 1 ] * iGrid[ iRow ][ iCollum + 2 ] * iGrid[ iRow ][ iCollum + 3 ];
iMaxVertical = GetBiggest( iMaxVertical, iVertical );
}
//across
if ( iCollum < 17 )
{
//calculate ihorizontal left to right (as above no need to go the other way)
iHorizontal = iGrid[ iRow ][ iCollum ] * iGrid[ iRow + 1 ][ iCollum ] * iGrid[ iRow + 2 ][ iCollum ] * iGrid[ iRow + 3 ][ iCollum ];
iMaxHorizontal = GetBiggest( iMaxHorizontal, iHorizontal );
}
//right diagonal down
if ( iRow < 17 && iCollum < 17 )
{
//calculate right diagonal
iRDiagonal = iGrid[ iRow ][ iCollum ] * iGrid[ iRow + 1 ][ iCollum + 1 ] * iGrid[ iRow + 2 ][ iCollum + 2 ] * iGrid[ iRow + 3 ][ iCollum + 3];
iRMaxDiagonal = GetBiggest( iRMaxDiagonal, iRDiagonal );
}
//left diagonal down
if ( iRow < 17 && iCollum > 2 )
{
//calculate left diagonal going down
iLDiagonal = iGrid[ iRow ][ iCollum ] * iGrid[ iRow + 1 ][ iCollum - 1 ] * iGrid[ iRow + 2 ][ iCollum - 2 ] * iGrid[ iRow + 3 ][ iCollum - 3];
iLMaxDiagonal = GetBiggest( iLMaxDiagonal, iLDiagonal );
}
}
}
//calculate the maximum between ivertical and ihorizontal
iMaxHorandVer = GetBiggest( iMaxHorizontal, iMaxVertical );
//calculate the maximum between irmaxdiagonal and ilmaxdiagonal
iMaxDiagonal = GetBiggest( iRMaxDiagonal, iLMaxDiagonal );
//calculate the biggest number of imaxdiagonal and imaxhorandver
iBiggestTotal = GetBiggest( iMaxHorandVer, iMaxDiagonal );
printf("biggest total of four numbers in any direction is: %ld\n", iBiggestTotal);
return 0;
}
long int GetBiggest( long int x, long int y )
{
if ( x > y )
{
return x;
}
return y;
}
the program is supposed to find the product of 4 consecutive numbers in the grid either up down left right or diagonally. However, each time i run the program i get a different answer (none of them right).