# Robson » Little 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: 168, 84, 42, 21, 64, 32, 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

• Mar 27, 2005 - Added solution 2.
• Feb 6, 2005 - Added solution 1.
© 2004-19 robson | cc unless stated