Я работаю над программой, и по большей части она у меня не работает. Единственная проблема, с которой я столкнулся, заключается в том, что моя функция 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;
}
int A[] = {}; - эта строка неверна. Я не совсем уверен, но, вероятно, он создает массив из 0 элементов (или поведение undefined). Чего вы там пытаетесь добиться? Откуда именно пытаются получить номера? Вы не передаете ничего, кроме одного int, этой функции. Может быть, вы хотели посчитать элементы ряда и найти его бегущий максимум?
Код не компилируется. из g++: " int A[] = {}; // ошибка: массив нулевого размера 'A' " Также помните, что C++ не поддерживает: " error: ISO C++ запрещает массив переменной длины 'A' [-Werror=vla ] " Рассмотрим вектор.
Я думаю, вам нужно поместить значения градины в массив «A []». Массив A в функции наибольший (int n) пуст, когда вы его сканируете. Очевидно, вы не передавали никаких значений для его ввода.





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.