Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 欧拉项目11_C++ - Fatal编程技术网

C++ 欧拉项目11

C++ 欧拉项目11,c++,C++,我正忙于Euler项目,我正试图解决这个问题,但答案似乎是错误的。但我不明白为什么,代码似乎是对的 vector<vector<int> > grid; ifstream stream("/home/uauser/workspace/Project_euler/grid.txt"); string line; char *tok; if (stream.is_open()) { while(stream.good()

我正忙于Euler项目,我正试图解决这个问题,但答案似乎是错误的。但我不明白为什么,代码似乎是对的

vector<vector<int> > grid;
    ifstream stream("/home/uauser/workspace/Project_euler/grid.txt");
    string line;
    char *tok;
    if (stream.is_open())
    {
        while(stream.good())
        {
            getline(stream, line);
            tok = strtok((char *)line.c_str(), " ");
            vector<int> row;
            while (tok != NULL)
            {
                int field;
                stringstream ss;
                ss << tok;
                ss >> field;
                row.push_back(field);

                tok = strtok(NULL, " ");
            }
            grid.push_back(row);
        }
        stream.close();
    }

    int product = 0;
    for(unsigned int i = 0; i < grid.size(); i++)
    {
        for(unsigned int j = 0; j < grid.at(i).size(); j++)
        {
            if( i < 17)
            {
                product = max(product, grid.at(i).at(j) * grid.at(i + 1).at(j) * grid.at(i + 2).at(j) * grid.at(i + 3).at(j));
            }
            if( j < 17)
            {
                product = max(product, grid.at(i).at(j) * grid.at(i).at(j+1)* grid.at(i).at(j+2) * grid.at(i).at(j + 3));
            }
            if((j < 17) && (i < 17) && (j >= 3) && (i >= 3))
            {
                product = max(product, grid.at(i).at(j) * grid.at(i-1).at(j+1) * grid.at(i-1).at(j+2) * grid.at(i -3).at(j+3));
                product = max(product, grid.at(i).at(j) * grid.at(i+1).at(j-1) * grid.at(i+1).at(j-2) * grid.at(i +3).at(j-3));
                product = max(product, grid.at(i).at(j) * grid.at(i+1).at(j+1) * grid.at(i+1).at(j+2) * grid.at(i + 3).at(j + 3));
                product = max(product, grid.at(i).at(j) * grid.at(i-1).at(j-1) * grid.at(i-1).at(j-2) * grid.at(i -3).at(j-3));
            }
            cout<<product<<endl;

        }
    }
    cout<<"The Product is: "<<product<<endl;
}
矢量网格;
ifstream stream(“/home/uauser/workspace/Project_euler/grid.txt”);
弦线;
char*tok;
if(stream.is_open())
{
while(stream.good())
{
getline(流、线);
tok=strtok((char*)line.c_str(),“”);
向量行;
while(tok!=NULL)
{
int字段;
细流ss;
ss>field;
行。推回(字段);
tok=strtok(空,“”);
}
网格。向后推(世界其他地区);
}
stream.close();
}
int乘积=0;
for(无符号整数i=0;i=3)和&(i>=3))
{
乘积=最大值(乘积,在(i)处的网格,在(j)处的网格,在(i-1)处的网格,在(j+1)处的网格,在(i-1)处的网格,在(j+2)处的网格,在(i-3)处的网格);
乘积=最大值(乘积,在(i)处的网格,在(j)处的网格,在(i+1)处的网格,在(j-1)处的网格,在(i+1)处的网格,在(j-2)处的网格,在(i+3)处的网格,在(j-3));
乘积=最大值(乘积,在(i)处的网格,在(j)处的网格,在(i+1)处的网格,在(j+1)处的网格,在(i+1)处的网格,在(j+2)处的网格,在(i+3)处的网格);
乘积=最大值(乘积,在(i)处的网格,在(j)处的网格,在(i-1)处的网格,在(j-1)处的网格,在(i-1)处的网格,在(j-2)处的网格,在(i-3)处的网格);
}

cout对角线的指数是错误的。例如:

... * grid.at(i-1).at(j+1) * grid.at(i-1).at(j+2) * grid.at(i -3).at(j+3))

中间部分应该有
i-2
而不是
i-1
。与其他对角线有类似的问题。

因为您的i/O循环正在测试
stream.good()
您可能是。使用
while(getline(stream,line))
代替。字符串标记化也有一个严重问题。修改
.c_str()的结果<代码>是未定义的行为。你将它的稳定性丢弃,并将其传递给<代码> Strtok()/Cuth>,修改字符串。如果你搜索,你会发现关于更好的C++字符串标记的许多问题/答案。