题目:
对一个正整数作如下操作:如果是偶数则除以 2,如果是奇数则加 1,如此进行直到 1 时操作停止,求经过 9次操作变为 1 的数有多少个?
解法思路:
第 9 次操作:结果 1 由 2 产生。 1 个被操作数
8:结果 2 只能由 4 产生。 1 个被操作数
7:结果 4 由 8、 3 产生。 2 个
6:结果 8 由 16、 7 产生;结果 3 由 6 产生。共 3 个
5:结果 16 由 32、 15 产生;结果 7 由 14 产生;结果 6 由 12、 5 产生。共 5 个„
每次操作,偶数( 2 除外)都由该数减 1 和该数的 2 倍得来,奇数只由该数的 2 倍得来
各次操作的操作对象个数为: 1, 1, 2, 3, 5, 8, 13, 21, 34,„
本题可以通过所给的变换规律,由易到难,确定操作可变为 1 的数组成斐波拉契数列,再根据所发现的规律求出
经过 9 次操作变为 1 的数的个数。
本人采用递归算法,新手写作,代码不规范之处请谅解。
#include <stdlib.h>
#include <stdio.h>
static int count = 0;
int test(int n)
{
if(n==1)
return count;
if(n%2==0)
{
n/=2;
count++;
}
else
{
n=n+1;
count++;
}
test(n);
}
void main()
{
int i;
int a[10];
int temp;
a[0]=0;
for(i=1;i<100;i++)
{
a[i]=test(i);
temp=a[i]-a[i-1];
if(temp==9)
printf("%d ",i);
}
}