srb*_*kmr 0 c++ debugging clock
这是一个简单的程序,我写的是找到长度<= L的所有非递减数字的数字,其数字总和为N.代码工作正常,但是当我尝试使用来自ctime的clock()计时运行时间时,它显示了奇怪的行为.
#include<iostream>
#include<vector>
#include<ctime>
using namespace std;
typedef long long int LL;
int Sum(LL S){
int sum=0;
for(;S;S/=10)
sum+=S%10;
return sum;
}
void Generate(LL S, int len, int N, int L, vector<LL> &V){
if(len<L)
for(int i=0;i<=9;++i)
if(i>=S%10)
Generate(S*10+i, len+1, N, L, V);
int sum = Sum(S);
if(sum!=N)
return;
else if(sum == N && len == L){
V.push_back(S);
cout << S << endl; //Line 4
return;
}
}
int main(){
int N,L;
vector<LL> V;
LL S;
cin >> N >> L;
clock_t start=clock(); //Line 1
Generate(S, 0, N, L, V);
//clock_t start=clock(); //Line 2
clock_t end = clock();
for(int i=0;i<V.size();++i)
cout << V[i] << " ";
cout << endl;
cout << "Run time: " << (double)(end-start)/CLOCKS_PER_SEC;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我记录了没有.在//第1行调用"生成"函数之前已经过了时钟滴答,之后我在//第2行做了同样的事情,我认为差异应该给我不.在生成所需数字时经过了时钟滴答.
但如果我这样做,我的功能"生成"的处理会受到影响!它不会将数字输出到stdout(来自//第4行),即使我传递了一个向量来存储生成的数字,它也不会存储任何数字!
但是,如果我在//第2行使用clock(),我在stdout上的输出就可以了,引用的向量V会被所需的结果填满.但是第2行上的clock()是没用的.
我无法理解的是如何调用clock()会影响'Generate'函数中的某些处理,除非我有一些模糊的Bug!或者clock()不应该用于这种递归设置?
请帮我调试一下.
我得到变量S正在使用而没有在代码中初始化.真的,你需要在一开始就把它初始化为0.从那时起,这种行为是非常难以预测的 - 因此有时你可能得到正确的答案,但我对此表示怀疑.它不依赖于.的调用clock().
| 归档时间: |
|
| 查看次数: |
445 次 |
| 最近记录: |