Blame view
11 - Mayor producto en cuadricula/p11.cpp
5 KB
f44c3066c p11: __Init__ |
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 |
/* Largest product in a grid Problem 11 In the 20×20 grid below, four numbers along a diagonal line have been marked in red. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 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 08 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 09 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 09 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 08 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 08 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 The product of these numbers is 26 × 63 × 78 × 14 = 1788696. What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid? */ |
f44c3066c p11: __Init__ |
33 |
#include <stdio.h> |
b94c8f960 p11 - Texto a Mat... |
34 35 |
#include <stdlib.h> #include <string.h> |
f44c3066c p11: __Init__ |
36 |
using namespace std; |
b94c8f960 p11 - Texto a Mat... |
37 38 |
#define SIZE_X 20 #define SIZE_Y 20 |
20676b739 p11 -matriz |
39 |
#define SIZE_MAX_NUMBER 2 |
b94c8f960 p11 - Texto a Mat... |
40 |
|
da9921201 p11 - Resuelto |
41 42 43 44 45 46 |
int multiplyHorRight(int x, int y, int grid[SIZE_X][SIZE_Y]); int multiplyVerDown(int x, int y, int grid[SIZE_X][SIZE_Y]); int multiplyDiagRight(int x, int y, int grid[SIZE_X][SIZE_Y]); int multiplyDiagLeft(int x, int y, int grid[SIZE_X][SIZE_Y]); int maxValue(int a, int b); |
f44c3066c p11: __Init__ |
47 48 |
int main(int argc, char const *argv[]) { |
b94c8f960 p11 - Texto a Mat... |
49 50 51 |
int x; int y; int grid[SIZE_X][SIZE_Y] = {0}; |
da9921201 p11 - Resuelto |
52 |
long resultMax = 0; |
20676b739 p11 -matriz |
53 |
char buffer[SIZE_MAX_NUMBER]; |
b94c8f960 p11 - Texto a Mat... |
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
char *ptrBuffer; char *ptrNumeros; char numeros[] = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 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 08 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 09 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 09 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 08 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 08 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 \0"; |
b94c8f960 p11 - Texto a Mat... |
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
x = y = 0; ptrBuffer = buffer; ptrNumeros = numeros; while(*ptrNumeros != '\0') { if (*ptrNumeros == ' ' || *ptrNumeros == ' ') { grid[x][y] = atoi(buffer); if (*ptrNumeros == ' ') { x++; } else { x = 0; y++; } ptrBuffer = buffer; |
20676b739 p11 -matriz |
98 |
memset(buffer,'\0',SIZE_MAX_NUMBER); |
b94c8f960 p11 - Texto a Mat... |
99 |
} |
20676b739 p11 -matriz |
100 |
else { *ptrBuffer++ = *ptrNumeros; } |
b94c8f960 p11 - Texto a Mat... |
101 102 103 |
ptrNumeros++; } |
da9921201 p11 - Resuelto |
104 105 106 |
//------------------------------------------ resultMax = 0; for (y = 0; y < SIZE_Y; ++y) |
b94c8f960 p11 - Texto a Mat... |
107 |
{ |
da9921201 p11 - Resuelto |
108 |
for (x = 0; x < SIZE_X; ++x) |
b94c8f960 p11 - Texto a Mat... |
109 |
{ |
da9921201 p11 - Resuelto |
110 111 112 113 |
resultMax = maxValue(multiplyHorRight(y, x, grid), resultMax); //Validacion de Horizontal resultMax = maxValue(multiplyVerDown(y, x, grid), resultMax); //Validacion de Vertical resultMax = maxValue(multiplyDiagRight(y, x, grid), resultMax); //Validacion en Diagonal derecha resultMax = maxValue(multiplyDiagLeft(y, x, grid), resultMax); //Validacion en Diagonal izquierda |
b94c8f960 p11 - Texto a Mat... |
114 |
} |
b94c8f960 p11 - Texto a Mat... |
115 |
} |
b94c8f960 p11 - Texto a Mat... |
116 |
|
da9921201 p11 - Resuelto |
117 118 |
printf("Resultado:\t%ld ", resultMax); |
b94c8f960 p11 - Texto a Mat... |
119 |
|
f44c3066c p11: __Init__ |
120 |
return 0; |
da9921201 p11 - Resuelto |
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
} //HORIZOTAL int multiplyHorRight(int x, int y, int grid[SIZE_X][SIZE_Y]) { return ( x+3 < SIZE_X ) ? grid[x][y] * grid[x+1][y] * grid[x+2][y] * grid[x+3][y] : 0; } //VERTICAL int multiplyVerDown(int x, int y, int grid[SIZE_X][SIZE_Y]) { return ( y+3 < SIZE_Y ) ? grid[x][y] * grid[x][y+1] * grid[x][y+2] * grid[x][y+3] : 0; } //DIAGONAL int multiplyDiagRight(int x, int y, int grid[SIZE_X][SIZE_Y]) { return ( x+3 < SIZE_X && y+3 < SIZE_Y ) ? grid[x][y] * grid[x+1][y+1] * grid[x+2][y+2] * grid[x+3][y+3] : 0; } int multiplyDiagLeft(int x, int y, int grid[SIZE_X][SIZE_Y]) { return ( x-3 >= 0 && y+3 < SIZE_Y ) ? grid[x][y] * grid[x-1][y+1] * grid[x-2][y+2] * grid[x-3][y+3] : 0; } int maxValue(int a, int b) { return (a >= b) ? a : b; |
f44c3066c p11: __Init__ |
166 |
} |