如果逆推此题,可以知道 1 一定是由 2 , 4 变化来的(因为2不能由1得到,不纳入以下讨论)
4 之后有可能是 8 和 3,因此分支开始。
每个偶数 2n 一定能产生两个分支——由4n 除以2得到,或者2n-1得到,
每个奇数 2n-1 只能是由偶数 4n-2除以2得到,
因此每个偶数逆推一次产生一个奇数和一个偶数,每个奇数逆推一次产生一个偶数
用一个很简单的函数循环7次就可以了(从4开始算),代码如下:
void func(int& numEven, int& numOdd)
{
int e = numEven;
int o = numOdd;
numEven = e + o;
numOdd = e;
}
int main()
{
int a = 1;
int b = 0;
for ( int i = 0; i < 7; ++i )
{
func(a, b);
}
cout << a << " " << b;
return 0;
}
得到偶数21个,奇数13个,总数34个。
int main() { int count = 0; for ( int i = 1; i <= 512; i++ ) { int num = i; for ( int j = 0; j < 9; j++ ) { if ( (num & 0x01) == 0 ) num >>= 1; //num为偶数则除2 else num += 1; if ( j < 8 && num == 1 ) { break; } // 排除还没到9次就已经为1的数 else if ( j == 8 && num == 1 ) { cout << i << " "; count++; } } } cout << endl << count << endl; return 0; }