Using a given initial positive non-zero integer it is possible to develop a sequence using the simple rules:
If the number is even then take half its value as the next term; if it is odd then make the next term equal to three times the current term plus one.
Given that the sequence will always eventually and with a 1, design a program to develop the sequence for any valid given value.
<? // check if the user entered a number // 0 is blocked because it makes php go unresponsive // the script can easily handle numbers above a million, but to be safe i'm going to block anything higher if (abs($_POST['input_number']) >= 1 && abs($_POST['input_number']) <= 1000000 && is_numeric($_POST['input_number'])) // use the positive whole version of the number supplied $number = abs(intval($_POST['input_number'])); else // generate a random number // 1 is included, although it's fairly boring $number = mt_rand(1, 200); // save the number started with $sequence[] = $number; // only loop while the number isn't 1 while ($number <> 1) { // check if the number is odd if ($number % 2) $number = ($number * 3) + 1; // it must be even else // divide by two $number /= 2; // add the current value to the sequence $sequence[] = $number; } // output all the numbers through the sequence echo 'Sequence: ' . implode(', ', $sequence);?>Which produces:
Sequence: 75, 226, 113, 340, 170, 85, 256, 128, 64, 32, 16, 8, 4, 2, 1
C++ solution.
#include <iostream.h>int main (){ int iNumber; cout << "Enter a number.\n>"; cin >> iNumber; cout << iNumber; while (iNumber > 1) { if (iNumber % 2) iNumber = (iNumber * 3) + 1; else iNumber /= 2; cout << ", " << iNumber; } return 0;}