这是Project Euler的第11个问题.它提供了一个20x20的数字网格并询问:
20x20网格中任意方向(上,下,左,右或对角)的四个相邻数字的最大乘积是多少?
我已多次查看我的代码,但我似乎无法找到为什么我的结果不正确.
#include <iostream>
using namespace std;
void find_greatest_product()
{
int grid[20][20] =
{{8, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 8},
{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, …Run Code Online (Sandbox Code Playgroud) 头文件dlist.h的一部分定义为:
#ifndef __DLIST_H__
#define __DLIST_H__
#include <iostream>
class emptyList {};
template <typename T>
class Dlist {
public:
bool isEmpty() const;
private:
struct node {
node *next;
node *prev;
T *o;
};
node *first; // The pointer to the first node (NULL if none)
node *last; // The pointer to the last node (NULL if none)
};
#include "dlist.cpp"
#endif
Run Code Online (Sandbox Code Playgroud)
当我创建这样的dlist.cpp文件时:
#include "dlist.h"
template <typename T>
bool Dlist<T>::isEmpty() const
{
return !first and !last;
}
Run Code Online (Sandbox Code Playgroud)
我在第4行收到错误消息:重新定义'bool Dlist :: isEmpty()const'
如果我删除了#include …
我正在使用广度优先搜索来查找图中的位置,我很确定我的算法正常工作,但是当我完成时,我很难找到结果的最短路径.基本上,我可以使用BFS从我的起始位置到达我的最终位置,但我不知道如何构建从最终到开头的最短路径.任何帮助,将不胜感激.
谢谢.
我正在尝试解决一个导致我为某些数据点创建最大和最小堆的问题.假设我有以下信息:
(10,100)
(30,120)
(14,110)
(18,200)
(20,230)
(13,49)
Run Code Online (Sandbox Code Playgroud)
我想将这些数据点存储在最大和最小堆中,但我想要用第二个值创建堆.但是,我仍然需要保留第一个值,因为我稍后在程序中使用它.我怎样才能完成这项任务?什么是最有效的STL方法总是弹出最大值或始终从一组数据点弹出最小值,同时仍然保留其他配对数据?
所有,我试图了解我们究竟是如何计算两个数组之间的反转次数.
比方说,我们有以下两个数组:
A = [1,2,3,4,5,6] B = [6,3,5,4,2,1]
我如何从概念上计算反演次数?也就是说,只看这两个数组,忽略所涉及的编码.
另外,我知道在两个数组之间绘制线段的惯例,但我试图在这里获得更深入的理解.
谢谢!
#include <iostream>
#include <string>
using namespace std;
class Person
{
string name;
public:
Person():name("")
{
cout << "Person default ctor\n";
}
Person(const string& name_in):name(name_in)
{
cout << "Person string ctor: " << name << "\n";
}
~Person()
{
cout << "Person dtor: " << name << "\n";
}
string get_name()
{
return name;
}
};
class Professor:public Person
{
int office;
public:
Professor(const string& name_in, int office_in):Person(name_in), office(office_in)
{
cout << "Professor string ctor: " << get_name() << endl;
} …Run Code Online (Sandbox Code Playgroud) 检查像"2.4393"或"2"这样的字符串是否有效的最快方法是什么 - 它们都可以用双倍表示,而字符串"2.343".或"ab.34"不是?我特别希望能够读取任何字符串,如果它可以是双,双变量分配给它,如果它不能为双(因为它是一个字或只是无效输入的情况下) ,显示错误消息.
是否可以确定某个整数是否小于N时间的斐波纳契数,其中N是第N个斐波纳契数?我正在尝试优化解决方案,这将有很大帮助.
我也试图排除所有外部库(因此下面的答案中的Math.sqrt()之类的东西不能用于我的目的).任何其他建议都会很棒.
谢谢.
我正在尝试这样的事情:
int integer;
cin >> integer;
if(!integer) {//do something}
Run Code Online (Sandbox Code Playgroud)
但显然这是一个问题,如果整数= 0.
是否有更有效的方法来检查某些东西是否为整数?