Проблема с программой последовательности Hailstone C++

Я работаю над программой, и по большей части она у меня не работает. Единственная проблема, с которой я столкнулся, заключается в том, что моя функция 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;
}
«Сможет ли кто-нибудь направить меня в правильном направлении для исправления этой ошибки?» НП, конечно. Используйте отладчик, шаг за шагом выполняя код, и наблюдайте, как и где меняются значения ваших переменных.
πάντα ῥεῖ 04.02.2019 21:26
int A[] = {}; - эта строка неверна. Я не совсем уверен, но, вероятно, он создает массив из 0 элементов (или поведение undefined). Чего вы там пытаетесь добиться? Откуда именно пытаются получить номера? Вы не передаете ничего, кроме одного int, этой функции. Может быть, вы хотели посчитать элементы ряда и найти его бегущий максимум?
Yksisarvinen 04.02.2019 21:33

Код не компилируется. из g++: " int A[] = {}; // ошибка: массив нулевого размера 'A' " Также помните, что C++ не поддерживает: " error: ISO C++ запрещает массив переменной длины 'A' [-Werror=vla ] " Рассмотрим вектор.

2785528 04.02.2019 22:31

Я думаю, вам нужно поместить значения градины в массив «A []». Массив A в функции наибольший (int n) пуст, когда вы его сканируете. Очевидно, вы не передавали никаких значений для его ввода.

2785528 04.02.2019 22:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
284
1

Ответы 1

The only issue I'm facing is that my largest() function (which is attempting to use a scan algorithm) is returning completely ridiculous values when trying to find the largest integer in a given hailstone sequence of n... Would anyone be able to steer me in the right direction for fixing this error?

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

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

Другие вопросы по теме