基本上,问题模拟以下内容:
有一个带有50个绿球和50个红球的骨灰盒.
我被允许从瓮中挑球,没有替换,遵守以下规则:对于每一个挑选的红球,我输了一美元,因为每一个选中的绿球,我都会获得一美元.
我可以随时停止挑选.最糟糕的情况是我选择所有100和净0.
问题是提出一个最佳停止策略,并创建一个程序来计算策略的预期价值.
我的策略是继续挑球,而选择另一球的预期价值是积极的.
也就是说,停止规则是DYNAMIC.
在Latex中,这是图像中的递归公式:
http://i.stack.imgur.com/fnzYk.jpg
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double ExpectedValue(double, double);
double max(double, double);
main() {
double g = 50;
double r = 50;
double EV = ExpectedValue(g, r);
printf ("%f\n\n", EV);
system("PAUSE");
}
double ExpectedValue(double g, double r){
double p = (g / (g + r));
double q = 1 - p;
if (g == 0)
return r;
if (r == 0)
return 0;
double E_gr = max ((p * ExpectedValue (g …Run Code Online (Sandbox Code Playgroud) 如果我取a的地址std::vector,并在插入元素后重新分配,我可以假设它的地址不会改变吗?
谢谢.
我一直在构建一个C++11库,并且头文件/源文件的数量已经增长到编译程序调用它需要将 20 多个.cpp文件传递到g++. 我一直在阅读共享库,这似乎是最好的解决方案。
但是,由于标题/源经常更改,我希望创建一个makefile可以自动.so从标题和源生成所有文件的文件。
为了更好地展示我正在尝试做什么,我将使用我的一个子库,Chrono并展示我将如何手动执行此操作。
我首先像这样创建目标文件,
$ g++ -std=c++11 -fPIC -g -c -Wall ../src/Chrono/cpp/DateTime.cpp
$ g++ -std=c++11 -fPIC -g -c -Wall ../src/Chrono/cpp/Schedule.cpp
$ g++ -std=c++11 -fPIC -g -c -Wall ../src/Chrono/cpp/Duration.cpp
$ g++ -std=c++11 -fPIC -g -c -Wall ../src/Chrono/cpp/DayCount.cpp
Run Code Online (Sandbox Code Playgroud)
这样我现在在当前目录中有DateTime.o, Schedule.o, Duration.o, 和DayCount.o。然后我创建.so文件,
$ g++ -shared -Wl,-soname,libChrono.so.1 -o libChrono.so.1.0.1 DateTime.o Schedule.o Duration.o DayCount.o -lc
Run Code Online (Sandbox Code Playgroud)
那我去,
$ rm ./*.o && ldconfig …Run Code Online (Sandbox Code Playgroud) 我试图理解为什么以下编译/运行尽管在运行时解析模板类型.是因为单独if/else调用f足以告诉编译器创建void f<double>(double)和void f<std::string>(std::string)?
test.hpp
#include <type_traits>
#include <string>
#include <iostream>
template <typename T>
void f(T x) {
if(std::is_same<T, std::string>::value)
std::cout << "String: " << x;
}
Run Code Online (Sandbox Code Playgroud)
TEST.CPP
#include <iostream>
#include "test.hpp"
int main(int, char** argv) {
double x(std::stod(argv[1]));
if(x < 42) f(x);
else f(std::to_string(x));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ (clan)g++ -std=c++14 test.cpp
$ ./a.exe 41
$ ./a.exe 43
String: 43.000000
Run Code Online (Sandbox Code Playgroud) 我放弃了尝试将2d数组传递给函数,其中维度在编译时是未知的.经过一些研究,似乎二维矢量可能是一个很好的替代品.我只是想确认这是声明一个维度totalRows X totalColumns的二维向量的正确方法,初始化每个单元格以包含空格字符:
vector<vector<char> > world(totalRows, vector<char>(totalColumns, ' '));
Run Code Online (Sandbox Code Playgroud) 我有一个空格分隔的文本文件,我需要从中提取单个单词以填充a vector<string>.
我试过玩strtok,但我知道这不起作用,因为strtok返回a char pointer.有没有办法从文件中提取单词,并string vector用它们填充?谢谢!
我有一个指针数组:pArray[rows][columns],每个元素都可以包含一个指向对象的指针.一些对象main()在堆上实例化,有些对象本身也在堆上实例化:也就是说,我传递pArray给一个对象成员函数,该函数创建了一个新对象,并在其中放入一个指针pArray.
现在,当我想要删除指向对象的指针时pArray,这里是否有所有权?意思是,如果一个对象创建了一个新对象并放置了一个指向它的指针,那么pArray只能创建者对象在该指针上调用delete吗?或者我可以main()通过将数组传递给它们来实现它和其他对象吗?
更多细节:
代码模拟网格上的捕食者猎物模型(pArray).于是,我开始从一个文件中的初始网格配置读书,和实例化对象(天敌,和猎物),对pArray从main().但是捕食者和猎物可以繁殖,因此物体会产生新的物体并通过传递pArray给它们,它们会实现它们的孩子pArray.
我正在尝试Eigen为容器类完成类似于高级初始化的操作.
即在main,我想填写类型的对象DynamicArray如下:
main.cpp中
// Create 3 x 3 Dynamic array and fill with 0's
DynamicArray da(3, 3, 0);
da << 1, 2, 3,
4, 5, 6,
7, 8, 9;
Run Code Online (Sandbox Code Playgroud)
我用来尝试实现此目的的方法是:
DynamicArray.hpp
template <typename T>
class DynamicArray {
// ...
public:
// ...
template <typename... Args,
typename = typename std::enable_if<ArgPackSameTruth<
std::is_convertible<Args, T>...>::value,
T>::type
> void operator<<(Args... x) {
typename std::vector<T> arg_vect{std::forward<Args>(x)...};
std::cout << arg_vect.size() << "\n";
// Load contents of arg_vect into *this...
return;
} …Run Code Online (Sandbox Code Playgroud)