RobsonLittle Red Book ▸ Hailstone numbers

Chapter 5 - Question 2

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.

Solution 1

<?    // 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: 57, 172, 86, 43, 130, 65, 196, 98, 49, 148, 74, 37, 112, 56, 28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
Create Hailstone Sequence

   

Solution 2

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; }

Log

© 2004-20 robson | cc unless stated