Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SIGSEGV";3n+;1“;_C++ - Fatal编程技术网

C++ SIGSEGV";3n+;1“;

C++ SIGSEGV";3n+;1“;,c++,C++,100-3n+1问题 我总是得到这个>>>运行时错误(SIGSEGV)i>>j){ MX=最大值(i,j); MN=min(i,j); 对于(;MN您可以检查为n获取的值的实际范围,因为它可能在数组长[1000001]之外。此外,您还可以检查递归深度。如果递归太深,则会溢出堆栈 我会考虑添加一个断言来测试n(I.代码>断言(n<1000001)< /代码>),可能还有一个递归深度变量,用于检查递归深度,作为诊断和调试此代码的第一步。您可以在中找到assert。请提供有意义的变量名称。该数组占用了

100-3n+1问题
我总是得到这个>>>运行时错误(SIGSEGV)i>>j){
MX=最大值(i,j);
MN=min(i,j);

对于(;MN您可以检查为
n
获取的值的实际范围,因为它可能在数组
长[1000001]
之外。此外,您还可以检查递归深度。如果递归太深,则会溢出堆栈


我会考虑添加一个断言来测试n(I.代码>断言(n<1000001)< /代码>),可能还有一个递归深度变量,用于检查递归深度,作为诊断和调试此代码的第一步。您可以在

中找到assert。请提供有意义的变量名称。该数组占用了大量可执行空间。该递归看起来可疑。我怀疑您的堆栈溢出w、 迭代重写这个如何?另外,您没有包含
。。您可能需要仔细研究相同的问题。
1. input n

2. print n

3. if n = 1 then STOP

4. if n is odd then n = 3n + 1

5. else n = n / 2

6. GOTO 2
Sample Input:
1 10
100 200
201 210
900 1000

Sample Output:
1 10 20
100 200 125
201 210 89
900 1000 174





    #include <iostream>
    using namespace std ;
    long int a[1000001];

    long int F (long int n){
        if(a[n]!=0)
            return a[n];
        else {
            if(n%2 !=0)
                a[n]=F(n*3+1)+1 ; 
            else 
                a[n]=F(n/2)+1 ; 
            return a[n];
        }
    }
    int main(){
        a[1]= 1 ;
        long int i , j , MX , MN , x=0 ;
        while (cin>>i >> j ){
            MX=max(i,j);
            MN=min(i,j);
            for(;MN<=MX;MN++){
                if(x<F(MN))
                    x=F(MN) ; 
        }

        cout<<i<<" "<<j<<" "<<x<<endl; 
        x= 0; 
        }

        return 0 ;
    }
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000001
static int result[MAX];
int calculate(unsigned long i);
int main()
{
    unsigned long int i = 0;
    unsigned long int j = 0;
    unsigned long int k = 0;
    int max,x,y;
    result[1] = result[0] = 1;
    while (scanf("%ld",&i)!= EOF)
    {
        scanf("%ld",&j);
        if (i > j)
        {
            x = i;
            y = j;
        }
        else
        {
            x = j;
            y = i;
        }
        max = 0;
        for (k = y; k <= x; k++)
        {
            if (result[k] != 0 && result[k] > max)
                max = result[k];
            else if (calculate(k) > max)
                max = result[k];
        }
        printf("%ld %\ld %d\n",i,j,max);
    }
    return 0;
}
int calculate(unsigned long i)
{
    if (i < MAX && result[i])
        return result[i];
    if ( i % 2 == 1 )
    {
        if (i < MAX)
            return  result[i] = 2+calculate((3*i+1)/2);
        else
            return 2+calculate((3*i+1)/2);
    }
    else
    {
        if( i < MAX)
            return result[i] = 1 + calculate(i / 2);
        else
            return 1 + calculate(i /2 );
    }
}