Maths teacher of ABC School given a assignment to his student. Assignment consist of 10 questions. one of his student David was able to do All question except the last one.
The Question is
An iterative function f(x) is defined as:
f(x) = x/2 (if x is even)
f(x) = 3x + 1 (if x is odd)
for example if x = 40, it generate the following Chain:
40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
The above Chain starting at 40 and finishing at 1 contains 9 terms. it is thought that all starting numbers finish at 1.
Find the starting number, longest chain (chain with higher number of terms) for the iterative function with in the specified range [Lower limit, Upper limit]
NOTE : Once the chain starts the terms are allowed to go above The Upper Limit
Your task is to help him to solve the question
For a value x of the iterative function f(x), we can find the number of terms in the chain by counting the number of times a loop will execute. Inside the loop x (loop variable) is altered according to the function definition & loop will terminate when the value of x will become 1.
First, we should get the required input (ie the range of function [Lower limit, Upper limit]).
Second, for a value x of the iterative function f(x), we can find the number of terms in the chain by using a loop. inside the loop value of x(loop variable) is altered according to the function definition (ie if the value of x is even x will become x/2 if it is odd x will become 3x+1). Loop will execute up to the value of x will become 1. The number of times loop executed will give us the no of terms in the chain.
Third, by repeating the second process for all value in the range [Lower limit, Upper limit] we can find the longest chain
using namespace std;
cin >> T;
// startNumber = Lower limit ,limit =, Upper limit
while(startNumber < limit+1)
terms = 1;
number = startNumber;
while (number > 1)
while(number % 2 == 0)
number /= 2;
if(number > 1)
number = (number * 3) + 1;
if (terms > saveTerms)
saveTerms = terms;
answer = startNumber;
cout<<“starting number: “<< answer<<” longest chain: “<<saveTerms<<”\n”;