《c++程序设计 * 基础、编程抽象与算法策略》
Programming Abatractions in C++
[美] 埃里克 S. 罗伯茨(Eric S. Roberts)著 李雁妮 译
冰雹序列(Hailstone Sequence)
通过对一个特定的整数 n 重复地执行一下规则,便可形成一列系数:
1、如果 n 等于 1 ,那么已经到达这个序列数的终点,可以停止。
2、如果 n 为偶数,将它除以 2 ;
3、如果 n 为奇数,将它乘以 3 再加 1 。
这些值忽上忽下,如冰雹在云中的形成。
冰雹序列最迷人之处是直到目前还没有人证明它最终能停止。冰雹序列的计算过程可以有很多步,但不知何故,它总能跳回到 1 。
代码:
1 /*
2 *Hailstone Sequence
3 *
4 * */
5 #include <iostream>
6
7 int hailstone(int x);
8
9 int main()
10 {
11 int a;
12 std::cout<< "Enter a number: ";
13 std::cin>> a;
14 hailstone(a);
15 return 0;
16 }
17
18 int hailstone(int x)
19 {
20 int step = 1;
21 if( x <= 0)
22 {
23 std::cout<< "The number should be greater than 0." <<std::endl;
24 return -1;
25 }
26 while( x != 1)
27 {
28 if( x % 2 )
29 {
30 std::cout<< step << " : " << x << " is odd, then multiply by 3 and add 1 to get ";
31 x *= 3;
32 x += 1;
33 std::cout<< x <<std::endl;
34 }
35 else
36 {
37 std::cout<< step << " : " << x << " is even, then divide it by 2 to get ";
38 x /= 2;
39 std::cout<< x <<std::endl;
40 }
41 step++;
42 }
43 std::cout<< "arraving the end point 1......" <<std::endl;
44 std::cout<< "*** End ***" <<std::endl;
45 }
执行: