2013 = 1006 * 2 + 1(2次)
1006 = 503 * 2(1次)
503 = 251 * 2 + 1(2次)
251 = 125 * 2 + 1(2次)
125 = 62 * 2 + 1(2次)
62 = 31 * 2(1次)
31 = 15 * 2 + 1(2次)
15 = 7 * 2 + 1(2次)
共18次,选A
#include<iostream> using namespace std; int main() { int n=2013,cnt=0; while(n!=1) { cout<<n<<endl; n=n&1>0?n-1:n/2; cnt++; } cout<<cnt<<"次"<<endl; return 0; }答案: A。
本题最容易想到的方法就是直接进行运算,采用反推的方法,从1到2013只允许执行加1操作或者加倍操作,那么从2013到1就只允许减1操作或者减半操作。具体步骤如下:由于2013是奇数,不能被2整除,此时对2013执行减1操作,变为2012,2012为偶数,能够被2整除,此时执行减半操作,变为1006,1006为偶数操作,于是继续执行减半操作,按照奇数减1,偶数减半的操作一直执行下去,最终结果就变为1了。整个过程如下:2013->2012->1006->503->502->251->250->125->124->62->31->30->15->14-> 7->6->3->2->1,此过程一共执行了18次。所以,正向推理过程也为18次。因此,选项A正确。