P07254. 数字的拆分之一


将数字N分成2份以上.使用的数字不可重复.例如5=1+4=2+3,就只有两种拆分的方式.输入: 每一行给出一个数字N,3<=N<=500.整个测试以0代表结束.

输入
本题有多组数据,整个测试以数字零代表结束

输出
输出有多行,每行一个数字,代表拆分的种数.

样例
输入复制
3
5
0
输出复制
1
2

 

Sol1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<bits/stdc++.h>
using namespace std;
long long f[510][510];
int main()
{
    int n;
    f[0][0]=1;
    for(int i=1; i<=6; i++)
    {
     
        for(int j=0; j<=6; j++)
        {
            f[i][j]=f[i-1][j];
            if(j>=i)
               f[i][j]+=f[i-1][j-i];
        //cout<<i<<"  "<<j<<"  "<<f[i][j]<<endl;
        }
   }
    while(cin>>n)
    {
        if(n==0) return 0;
        cout<<f[n][n]-1<<"\n";
    }
    return 0;
}

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int N=550;
int n,f[N];
signed main() {
    while(scanf("%lld",&n)&&n){
        memset(f,0,sizeof(f));
        f[0]=1;
        for(int i=1;i<n;i++)
            for(int j=n;j>=i;j--)
                f[j]=(f[j]+f[j-i]);
        printf("%lld\n",f[n]);
    }
    return 0;
}

  

 

 

P07255. 数字的拆分之二

Description
将数字N进行拆分.拆分出来的数字可以重复使用.

Format
Input
每一行给出一个数字N,3<=N<=500.整个测试以0代表结束.

Output
拆分的种数.

Samples
输入数据 1
3
0
输出数据 1
3
说明: 3=3,3=1+1+1,3=1+2。

       状态

 

阶段

0

1

2

3

4

5

6

7

0

1

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

2

1

1

2

2

3

3

4

4

3

1

1

2

3

4

5

7

8

4

1

1

2

3

5

6

9

11

5

1

1

2

3

5

7

10

13

6

1

1

2

3

5

7

11

       14

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<bits/stdc++.h>
using namespace std;
long long f[510][510];
int main()
{
    int n;
    f[0][0]=1;
    for(int i=1; i<=500; i++)
    {
        for(int j=0; j<=500; j++)
        {
            f[i][j]=f[i-1][j];
            if(j>=i)
               f[i][j]+=f[i][j-i];
        //cout<<i<<"  "<<j<<"  "<<f[i][j]<<endl;
        }
   }
    while(cin>>n)
    {
        if(n==0) return 0;
        cout<<f[n][n]<<"\n";
    }
    return 0;
}

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<bits/stdc++.h>
using namespace std;
int w[505];
int main()
{
    int n;
    memset(w,0,sizeof(w));
    while(cin>>n && n!=0)
    {
        w[0]=1;
        for(int i=1;i<=n;i++)
            for(int j=i;j<=n;j++)
                w[j]+=w[j-i];
        cout<<w[n]<<endl;
    }
    return 0;
}

  

posted @   我微笑不代表我快乐  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示