Проблема с программой последовательности Hailstone C ++ - PullRequest
0 голосов
/ 04 февраля 2019

Я работаю над программой, и по большей части у меня ее нет.Единственная проблема, с которой я сталкиваюсь, заключается в том, что моя функция largest() (которая пытается использовать алгоритм сканирования) возвращает совершенно нелепые значения при попытке найти наибольшее целое число в данной последовательности града n.Кажется, что для первых нескольких значений, которые я тестирую, получается, что они маленькие, как 1 или 2, но если я введу 3 или выше, я получу что-то вроде 1153324768, что совсем не ответ.Кто-нибудь сможет направить меня в правильном направлении для исправления этой ошибки?Я перечислил мой код ниже

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;


// Next(n) returns the number that follows n in a hailstone sequence.
// For example, next(7) = 22 and next(8) = 4.
//
// Next requires n > 1, since there is no number that follows 1.

int Next(int n)
{
    int remainder;
    remainder = n % 2;
    if (n>1)
    {
        if(remainder == 0)
        {
            return n/2;
        }
        else
        {
            return 3 * n + 1;
        }
    }
    else
    {
        return n;
    }
}

// The function writeHailstoneSequence(n) will take the parameter n
// and write the entire hailstone sequence starting from n, all in one     line.

void writeHailstoneSequence(int n)
{
    printf("The hailstone sequence starting with %d is: %d ", n, n);
    while (n > 1)
    {
        n = Next(n);
        printf("%d ", n);
    }
}  

// The function lengthHailstone(n) will take the parameter n and return     the
// the length of the hailstone sequence starting at n.

int lengthHailstone(int n)
{
    int length = 1;
    while (n > 1)
    {
        n = Next(n);
        length++;
    }
    return length;
}

//The function largest(n) will take one parameter, integer n, and return the largest value.

int largest(int n)
{
    int A[] = {};
    int big = A[0];
    for(int i = 0; i < n; i++)
    { 
        big = max(big, A[i]);
    }
    return big;
}

// The function longest(n) will return the longest hailstone sequence starting witht a number from 1 to n.

int longest(int n)
{
    int lon = 0;
    for (int i = 1; i <= n; i++)
    {
        lon = lengthHailstone(n);
    }
    return lon;
}

// The function largestHailstone(n) returns the largest value that occurs in a hailstone sequence that starts
// with a number from 1 to n.
int biggestHailstone(int n)
{
    int biggest = 0;
    for (int i = 1; i <= n; i++)
    {
        biggest = largest(n);
    }
    return biggest;
}

int main()
{
    int n;
    printf("What number shall I start with?\n");
    scanf("%d", &n);
    writeHailstoneSequence(n);
    printf("\nThe length of the sequence is: %d\n", lengthHailstone(n));
    printf("The largest number in the sequence is %d\n", largest(n));
    printf("The longest hailstone sequence starting with a number up to %d has a length %d\n", n, longest(n));
    printf("The longest hailstone sequence starting with a number up to %d begins with %d", n, biggestHailstone(n));
    return 0;
}

1 Ответ

0 голосов
/ 05 февраля 2019

Единственная проблема, с которой я сталкиваюсь, заключается в том, что моя самая большая функция () (которая пытается использовать алгоритм сканирования) возвращает абсолютно нелепые значения при попытке найти наибольшее целое число в данной последовательности града n.Кто-нибудь сможет направить меня в правильном направлении для исправления этой ошибки?

Основное направление расследования:

Вам не удалось зафиксировать последовательность града в вашем массиве A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...