同一个数组元素的值不同?

时间:2018-06-04 20:49:25

标签: c++ codeblocks cout

所以我不确定这里发生了什么。

我有一个应该解决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;
}

这就是我得到的:

enter image description here

我使用的编译器是CodeBlocks,虽然我已经在其他人身上测试了它,但它也是同样的问题!

由于

1 个答案:

答案 0 :(得分:2)

在线:

ibmcloud cs cluster-service-bind <ClusterID> prod conversation-service-12tg

在C ++ 17标准之前,允许编译器以任何顺序评估操作数,因此它可以查找 cout << collatz(1000) << " " << a[1] << " " << a[2] << " " << a[3]<< "\n"; 等并保存结果,然后调用a[1],然后以正确的顺序显示保存的结果。

要解决此问题,请在C ++ 17模式下编译(使用collatz(1000)编译器开关)或将代码更改为:

-std=c++17