题意:给你一个数n,用2的幂相加,和为n,共有多少种
解题思路:
递推.
一、当n为奇数时,a[n]=a[n-1];
二、当n为偶数时有两种情况:
1、n=n-2+1+1;
2、n=n/2*2;
所以:a[n]=a[n-2]+a[n/2];
程序:
#include<stdio.h>
#include<string.h>
#define N 1000000000
#define M 1000006
int a[M];
int main()
{
int n,i,j;
a[0]=1;
a[1]=1;
for(i=2;i<M;i++)
{
if(i%2!=0)
a[i]=a[i-1];
else
{
a[i]=(a[i-2]+a[i/2])%N; // 每次都先取余
}
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",a[n]);
}
return 0;
}