私の3N + 1最長のシーケンスのこのコードのための最終的な出力を追跡していないことは...あなたは5を1を入力すると私のC++プログラムは
範囲の開始値と最も長いシーケンスです[ 1,5]は8個の要素を持つ。
代わりに{16個の要素}が得られます。
私の問題は私のカウンターシステムにあると思われ、返されます。どのように私はこれを修正することができますについてのアドバイスを誰も持っていますか?
#include <iostream>
using namespace std;
// Functions
void getUserInput(int &start, int &end);
int longestSequence(int minimum, int maximum);
int getNextElement(int x);
string generateSequence(); // still need to write definition
int counter = 1;
int main()
{
int minimum;
int maximum;
int last;
getUserInput(minimum, maximum); //
last = longestSequence(minimum, maximum); // starts longest sequence counter
cout << "The longest sequence with a start value in the range [" << minimum
<< ", " << maximum << "] has " << last << " elements." << endl;
return 0;
}
void getUserInput(int &start, int &end)
{
cout << "Enter the min of the range for the sequence to start " << endl;
cin >> start;
cout << "Enter the max of the range for the sequence to start " << endl;
cin >> end;
}
int getNextElement(int x) // // This function does the 3n+1 computation
{
if (x != 1) // Checks for the end of the sequence. The end being when the number is 1.
{
counter++;
if (x % 2 == 0) // checks if its even
getNextElement(x/2); // takes the new number through the function again
else
getNextElement(x * 3 + 1); // takes the new number into the function again
}
cout << "This is in getNextElement" << counter << endl;
return counter; // this is returned as length in the longestSequence function.
}
int longestSequence(int minimum, int maximum) // this function compares all the sequence lengths within the range of minimum and maximum.
{
int max = 0; // Longest seqence
for (int i = minimum; i <= maximum; i++)
{
int length = getNextElement(i); // length is a temp that will hold the longest seqence
if (length > max) // this loop validates if the newest "length" from the sequence is bigger than the previous one
cout << "This is in the longest sequence loop ... length" << length
<< endl;
cout << "This is in the longest sequence loop AS MAX" << length << endl;
max = length; // after the first run of the loop, max stores the longest seqence, and updates it after each run of the for loop if its longer
// counter = 1; not sure why this is here
}
cout << "This is in longest sequence.... max " << max << endl;
return max;
}
コメントを重ねると、コードを難しくなく簡単に読むことができます。そして、このようなもの: '// Functions'は一種の侮辱です。 – user4581301
'max = length; //ループの最初の実行後、maxは最長のseqenceを格納し、forループが実行されるたびにそれを更新します。ここで調査を開始してください。 – user4581301
'//カウンタ= 1;なぜこれがここにあるのか分からないのですが、もう少し長く考えてください。真剣に言えば、あなたが先週本質的にこの質問をしたとき、あなたはもっと近づいていました。 – user4581301