c++(冰雹序列)

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

执行:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值