使用c-style i/o进行编程时,我有时会使用freopen()重新打开stdin进行测试,这样我就不必重复输入输入.我想知道是否有相当于c ++的i/o流.此外,我知道我可以使用管道在命令行/终端/任何炎症上重定向它但我想知道是否有办法在我的代码中执行它(因为你可以看到,我不是很了解CL/T/W).
我在一次采访中向我询问了这个问题,并且令人尴尬地暴露了我在动态编程方面的缺点.如果有人可以帮我解决这个问题,我将不胜感激.此外,如果您能够在设计解决方案时解释您的思维过程对我(以及其他人)非常有帮助,因为当我看到一个使用动态编程范例的解决方案但我很难理解时,我似乎能够理解跟我一起.
不用多说,这是我被问到的问题.
给定一个整数i,并设置X的k点x1,x2,... xk上实线,选择i从设定点X,以尽量减少对距离的每一个点的总和X到一个点在i使用动态规划.
设A [1 .. n]是n distinct个数的数组.如果i <j且A [i]> A [j],那么对(i,j)被称为A的反转.(有关反演的更多信息,请参阅问题2-4.)假设选择A的每个元素从1到n的范围内随机,独立地和均匀地.使用指标随机变量来计算预期的反转次数.
问题来自Cormen的算法导论中的练习5.2-5 .这是我的递归解决方案:
假设x(i)是[1..i]中的反转次数,而E(i)是x(i)的期望值,那么E(i + 1)可以如下计算:
我们有的图像i+1如果我们将i + 1置于第一个位置,则放置所有数字的位置,然后x(i + 1)= i + x(i); 如果我们将i + 1放在第二个位置,那么x(i + 1)= i-1 + x(i),...,所以E(i + 1)= 1 /(i + 1)*sum( k)+ E(i),其中k = [0,i].最后我们得到E(i + 1)= i/2 + E(i).
因为我们知道E(2)= 0.5,所以递归得到:E(n)=(n-1 + n-2 + ... + 2)/ 2 + 0.5 = n*(n-1)/ 4 .
虽然上面的推论似乎是正确的,但我仍然不太确定.所以我在这里分享.
如果有问题,请纠正我.
鉴于此代码:
class X
{
public:
template< typename T >
void func( const T & v );
};
template<>
void X::func< int >( const int & v )
{
}
template<>
void X::func< char * >( const char * & v ) // 16
{
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我得到以下错误.
test.cpp:16: error: template-id 'func<char*>' for 'void X::func(const char*&)' does not match any template declaration
Run Code Online (Sandbox Code Playgroud)
任何人都可以对此有所了解吗?
我需要关于班级建设的帮助.在我的课程中,我使用了复制构造函数和operator =来阻止编译器创建它们.在我的主程序中,当我尝试创建类的实例时,我收到一条错误,上面写着"该类没有默认的构造函数".
可能是什么问题呢?
这是我的代码片段.
class netlist {
netlist(const netlist &);
netlist &operator=(const netlist &);
std::map<std::string, net *> nets_;
}; // class netlist
Run Code Online (Sandbox Code Playgroud)
在我使用的主要功能中:
netlist nl;
Run Code Online (Sandbox Code Playgroud)
这是我得到错误的地方.我提供了复制构造函数声明,所以它们应该不是问题.
我很感激任何帮助.提前致谢.
我试图逐行显示命令行输入文本文件的文本.但由于某种原因,它会在第一行之后跳过每行中的第一个单词.
码:
using std::cout;
using std::cin;
using std::endl;
int main (int args, char* argv[])
{
char x[100];
char y[100];
char z[100];
cin.getline(x,100) >> argv[2];
cin.getline(y,100) >> argv[2];
cin.getline(z,100) >> argv[2];
cout << x <<endl;
cout << y <<endl;
cout << z <<endl;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
运行./a.out <moby.txt显示:
CHAPTER 1. Loomings.
me Ishmael. Some years ago--never mind how long precisely--having
or no money in my purse, and nothing particular to interest me on
Run Code Online (Sandbox Code Playgroud)
但是moby.txt中的前三行是这样的:
CHAPTER 1. Loomings.
Call me Ishmael. Some …Run Code Online (Sandbox Code Playgroud) 我已经为两个算法提供了解决相同问题的运行时函数.让我们说 -
对于第一算法:( T(n) = an + b在n中线性)
对于第二算法:( T(n) = xn^2 + yn + z在n中的二次)
每本书都说线性时间比二次更好,当然它更大n(多大?).我觉得基于常量a,b和x,y和大变化的定义z.
你能不能让我知道如何找到n我们应该从algo2切换到algo1的门槛,反之亦然(是否只能通过实验找到?).如果有人能解释如何在专业软件开发组织中完成,我将不胜感激.
我希望我能解释一下我的问题,如果没有,请告诉我.
在此先感谢您的帮助.
PS - 实现将使用Java,并且预计将在各种平台上运行.我觉得非常难估计常数a,b,x,y和z数学.我们如何解决专业软件开发中的这种困境?