2
static void collatz(int i)
{
    int x=0,a=0,res=0,count=0;
    int array[50];
    array[0]=i;
    while(array[count]!=0)
    {
        if(array[count]%2==0)
        {
            count++;
            array[count]=i/2;
        }
        else
        {
            count++;
            array[count]=3*array[count-1]-1;
        }
    }
}
int main()
{
    int a;
    scanf("%d",&a);
    collatz(a);
    system("pause");
    return 0;
}

コードをコンパイルして実行するときに、「a」として 8 を入力すると、コンソールがクラッシュします。私はdev cを使用しています。私のひどい英語で申し訳ありませんが、十分に明確であることを願っています。

4

2 に答える 2

0

まず、while ループが間違っています。テストにarray[count] == 1使用できるように、while を終了する必要があります。while(array[count] > 1)

第二に、array[count]=i/2;間違っています。使用する必要がありますarray[count]=array[count-1]/2;

count < 503 番目に、を宣言しているため、を確認する必要がありますint array[50];

static void collatz(int i) 
{
    int x=0,a=0,res=0,count=0;
    int array[50]= {0};
    array[0]=i;
    while(array[count] > 1 && count < 50)
    {
        if(array[count]%2==0)
        {
            count++;
            array[count]=array[count-1]/2;
        }
        else
        {
            count++;
            array[count]=3*array[count-1]-1;
        }
    }
}
于 2014-03-26T01:04:20.630 に答える