에서 가장 큰 제품 찾기 :나는 다음과 같은 문제를 해결하기 위해 노력하고 일련의
https://projecteuler.net/problem=8는 기본적으로 나는 2 차원 배열을 통해 갈거야을하고 8 개 방향의 각 (N, NW, NE에서 13 자리의 제품을 받고, E, W, S, SW, SE) 및 반환 값을 최대 값 (있는 경우)으로 설정합니다.
하지만 64497254400의 대답이 잘못되어 있습니다. 내가 뭘 잘못하고 있는지에 대한 암시는 없습니까?
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
long long int MAX(long long int a, long long int b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
void largest_product_in_series(int param)
{
char filename[] = "8_.txt";
char my_character ;
int column = 0; int row = 0;
int c = 0; int r = 0; int cc = 0; int rr = 0;
int list[100][100];
int num = param - 1;
ifstream fin;
fin.open(filename, ios::in);
while (!fin.eof())
{
fin.get(my_character);
if (my_character == '\n')
{
row++;
r++;
c = 0;
cout << endl;
}
else
{
if (row == 0)
{
column++;
}
list[r][c] = (my_character - '0');
cout << list[r][c];
c++;
}
}
cout << "Column: " << column << endl;
cout << "Row: " << row << endl;
long long int greatest_product = 0;
long long int product = 0;
for (rr = 0; rr < row; rr++)
{
for (cc = 0; cc < column; cc++)
{
//cout << "Column: " << cc << " Row: " << rr << endl;
if (rr >= num)
{
r = rr;
c = cc;
product = list[r--][c];
for (int i = 0; i < num; i++)
{
product *= list[r--][c];
}
greatest_product = MAX(greatest_product, product);
}
if ((rr + num) <= row)
{
r = rr;
c = cc;
product = list[r++][c];
for (int i = 0; i < num; i++)
{
product *= list[r++][c];
}
greatest_product = MAX(greatest_product, product);
}
if (cc >= num)
{
r = rr;
c = cc;
product = list[r][c--];
for (int i = 0; i < num; i++)
{
product *= list[r][c--];
}
greatest_product = MAX(greatest_product, product);
}
if ((cc + num) <= column)
{
r = rr;
c = cc;
product = list[r][c++];
for (int i = 0; i < num; i++)
{
product *= list[r][c++];
}
greatest_product = MAX(greatest_product, product);
}
if ((rr >= num) && (cc >= num)) // NW
{
r = rr;
c = cc;
product = list[r--][c--];
for (int i = 0; i < num; i++)
{
product = list[r--][c--];
}
greatest_product = MAX(greatest_product, product);
}
if ((rr >= num) && ((cc + num) <= column)) // NE
{
r = rr;
c = cc;
product = list[r--][c++];
for (int i = 0; i < num; i++)
{
product = list[r--][c++];
}
greatest_product = MAX(greatest_product, product);
}
if (((rr + num) <= row) && ((cc >= num))) // SW
{
r = rr;
c = cc;
product = list[r++][c--];
for (int i = 0; i < num; i++)
{
product = list[r++][c--];
}
greatest_product = MAX(greatest_product, product);
}
if (((rr + num) <= row) && ((cc + num) <= column)) // SE
{
r = rr;
c = cc;
product = list[r++][c++];
for (int i = 0; i < num; i++)
{
product = list[r++][c++];
}
greatest_product = MAX(greatest_product, product);
}
//cout << "G: " << greatest_product << endl;
}
}
cout << "Greatest Product: " << greatest_product << endl;
}
int main(void)
{
largest_product_in_series(13);
return 0;
}
아마도 버그는 아니지만 'while (! fin.eof())'는 수정해야 할 가치가 있습니다. 자세한 정보는 다음과 같습니다 : [iostream :: eof가 루프 상태에있는 이유는 무엇입니까?] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – user4581301
당신이 잘못하고있는 것은 매우 분명합니다. 실행되는 동안 한 번에 한 줄씩 코드를 단계별로 실행하기 위해 디버거를 사용하지 않고 모든 변수의 값을 검사하여 프로그램의 실제 논리가 어떻게 다른지 확인하십시오 기대 한 결과. 디버거를 사용하는 방법을 아는 것은 모든 C++ 개발자에게 필요한 기술입니다. 너 혼자 이것을 알아낼 수 있어야한다. 이것은 정확히 디버거의 목적입니다. –