首页 > 试题广场 >

整数拆分

[编程题]整数拆分
  • 热度指数:25132 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。

输入描述:
每组输入包括一个整数:N(1<=N<=1000000)。


输出描述:
对于每组数据,输出f(n)%1000000000。
示例1

输入

7

输出

6
#include <stdio.h>

int main() {
    int dp[1000001],n;
    dp[1]=1,dp[2]=2;
    int i,j,sum=3;
    for(i=2;i<=1000000;++i){
        if((i&1)==1){
            dp[i]=dp[i-1];
        }else{
            dp[i]=dp[i/2]+dp[i-1];
        }
        dp[i]%=1000000000;
    }
    while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
        printf("%d",dp[n]);
    }
    return 0;
}
发表于 2023-02-25 14:13:25 回复(1)

问题信息

难度:
1条回答 25730浏览

热门推荐

通过挑战的用户

查看代码