同一数组元素的不同值?
Different values for the same array element?
所以我不确定这里发生了什么。
我有一个应该解决 this 问题的函数,除了在 main() 中键入数组元素时我得到不同的结果:
- 0 如果我将它与函数
放在同一行
- 如果我在下面写出正确的结果
代码如下:
#include <bits/stdc++.h>
using namespace std;
int a[100100],mx=0,bg;
int collatz(int n){
a[1] = 1;
for(int i=2; i<=n; i++){
int p = 0;
int j=i;
while(j!=1 && j>=i){
if(j%2==0) j/=2, p++;
else if(j%2==1) j=3*j+1,
}
a[i] = p + a[j];
if(mx<a[i]) mx = a[i], bg = i;
}
return mx;
}
int main()
{
for(int i=1; i<=10000; i++) a[i] = 0;
cout << collatz(1000) << " " << a[1] << " " << a[2] << " " << a[3]<< "\n";
cout << a[1] << " " << a[2] << " " << a[3] << " ";
return 0;
}
这是我得到的:
我使用的编译器是CodeBlocks,虽然我已经在其他人身上测试过了,也是同样的问题!
谢谢
在线:
cout << collatz(1000) << " " << a[1] << " " << a[2] << " " << a[3]<< "\n";
在 C++17 标准之前,允许编译器以任何顺序计算操作数,因此它可以查找 a[1]
等并保存结果,然后调用 collatz(1000)
,然后按正确的顺序显示保存的结果。
要解决此问题,请在 C++17 模式下编译(使用 -std=c++17
编译器开关)或将代码更改为:
cout << collatz(1000);
cout << " " << a[1] << " " << a[2] << " " << a[3]<< "\n";
所以我不确定这里发生了什么。
我有一个应该解决 this 问题的函数,除了在 main() 中键入数组元素时我得到不同的结果:
- 0 如果我将它与函数 放在同一行
- 如果我在下面写出正确的结果
代码如下:
#include <bits/stdc++.h>
using namespace std;
int a[100100],mx=0,bg;
int collatz(int n){
a[1] = 1;
for(int i=2; i<=n; i++){
int p = 0;
int j=i;
while(j!=1 && j>=i){
if(j%2==0) j/=2, p++;
else if(j%2==1) j=3*j+1,
}
a[i] = p + a[j];
if(mx<a[i]) mx = a[i], bg = i;
}
return mx;
}
int main()
{
for(int i=1; i<=10000; i++) a[i] = 0;
cout << collatz(1000) << " " << a[1] << " " << a[2] << " " << a[3]<< "\n";
cout << a[1] << " " << a[2] << " " << a[3] << " ";
return 0;
}
这是我得到的:
我使用的编译器是CodeBlocks,虽然我已经在其他人身上测试过了,也是同样的问题!
谢谢
在线:
cout << collatz(1000) << " " << a[1] << " " << a[2] << " " << a[3]<< "\n";
在 C++17 标准之前,允许编译器以任何顺序计算操作数,因此它可以查找 a[1]
等并保存结果,然后调用 collatz(1000)
,然后按正确的顺序显示保存的结果。
要解决此问题,请在 C++17 模式下编译(使用 -std=c++17
编译器开关)或将代码更改为:
cout << collatz(1000);
cout << " " << a[1] << " " << a[2] << " " << a[3]<< "\n";