Need Help on This Problem

Hey guys,

I need help on this problem I'm working on. Details on the
problem are in the comment section at the beginning of the
code. I started off making the list of numbers into a string.
From the string, I'm trying to convert the numbers into
integers and putting them inside a 20by20 array, so it can
look like the grid shown in the comments. My problem, as you
can see in the output, is that the integers at the end of every
row got converted wrong somehow. Please show me what is wrong
with my code.

ps. I do not want answers to the problem; I think I can solve it
myself. I just need hints to fix this problem of mine, so I can
continue the rest of the code myself.

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
68
69
//Largest Product in a Grid
/*In the 2020 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 2020 grid?*/

#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::string;

int numconvert(string a, int b);
void numsingrid(string a, int b[19][19]);


int main()
{
	string nums = "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 ";
	int grid[19][19];
	numsingrid(nums, grid);
	for(int i = 0; i < 20; i++){
		for(int j = 0; j < 20; j++) {
			cout << grid[i][j] << " ";
		}
		cout << endl;
	}
	system("PAUSE");
	return 0;
}

int numconvert(string a, int b)
{
	int num = ((a[b - 3] - 48) * 10) + (a[b - 2] - 48);
	return num;
}

void numsingrid(string a, int b[19][19]) 
{
	int num, counter = 1;
	for(int i = 0; i < 20; i++) {
		for(int j = 0; j < 20; j++) {
			b[i][j] = numconvert(a,(counter * 3));
			++counter;
		}
	}
}



8 2 22 97 38 15 0 40 0 75 4 5 7 78 52 12 50 77 91 49
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 4 56 62 81
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 3 49 13 36 52
52 70 95 23 4 60 11 42 69 24 68 56 1 32 56 71 37 2 36 22
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 24
24 47 32 60 99 3 45 2 44 75 33 53 78 36 84 20 35 17 12 32
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 67
67 26 20 68 2 62 12 20 95 63 94 39 63 8 40 91 66 49 94 24
24 55 58 5 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 21
21 36 23 9 75 0 76 44 20 45 35 14 0 61 33 97 34 31 33 78
78 17 53 28 22 75 31 67 15 94 3 80 4 62 16 14 9 53 56 16
16 39 5 42 96 35 31 47 55 58 88 24 0 17 54 24 36 29 85 86
86 56 0 48 35 71 89 7 5 44 44 37 44 60 21 58 51 54 17 19
19 80 81 68 5 94 47 69 28 73 92 13 86 52 17 77 4 89 55 4
4 52 8 83 97 35 99 16 7 97 57 32 16 26 26 79 33 27 98 88
88 36 68 87 57 62 20 72 3 46 33 67 46 55 12 32 63 93 53 4
4 42 16 73 38 25 39 11 24 94 72 18 8 46 29 32 40 62 76 20
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 4 36 20
20 73 35 29 78 31 90 1 74 31 49 71 48 86 81 16 23 57 5 1
1 70 54 71 83 51 54 69 16 92 33 48 61 43 52 1 89 19 67 48
Press any key to continue . . .
There is at least one misprint.

Instead of int grid[19][19]; should be int grid[20][20];

I also advise you to use something like it:
1
2
3
4
5
6
...
const int N = 20;
...
...
for(int i = 0; i < N; i++)
...


Yeah, making it a 20x20 int array should solve it otherwise you would be trying to write those numbers at a wrong memory location, which would either cause an error or not work correctly.

Thanks,
Aceix.
Okay thanks guys, that solved the problem. I forgot 0 doesn't count when declaring an array.



@tfityo Can you explain the reason for making 20 a const integer? It is a constant literal, so I can't change it within the code anyways.
Last edited on
Imagine, that you will get slightly different grid, 10 by 10 for an example.
Than you should replace 20 with 10 in 6 places (or even more). This is an error prone practice.

It is better style of programming to declare a constant once and then use that constant.
Also, quoting you. (:
I forgot 0 doesn't count when declaring an array.


It actually does!

int array[ 10 ];

Will have index's 0 through 9. array[ n-1 ] being the last index in the array.
Topic archived. No new replies allowed.