描述

将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。

正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。

输入

标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。

输出

对于每组测试数据,输出N的划分数。

样例输入

5

样例输出

7

提示

5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1

可能是因为本人比较笨的原因吧,这道题提交了九遍才对。

一开始觉得像斐波那契的变式,但后来才发现不行,才老老实实写递归,这个问题我们需要把我们递归的数记录下来,因为题目说了(n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1)

所以我们用a数组来记录,每次判断这个数行不行时,就与前面的数进行判断,比大小,本人给这个递归函数取了一个没有技术含量的名字叫solve(int n),我们用循环从1到n(两端取到,不必从0~n,因为0可以一直递归下去,而且判断n时,就相当于在判断0)。

OK,那么我们这个边界值就是n==0,就cnt++;

最后输出。

提醒一下,数据最大为50,会超时,所以我们保险起见,先把40~50的结果打出来,直接复制给a,然后输出。

我是把1~40的先算出来,40-50的直接复制。然后再输入n,直接输出。

好了,看代码。

#include

using namespace std;

long long int n,a[1000],cnt,b[70];

void solve(int m,int death)

{

bool flag=1;

if(m==0)

{

cnt++;

}

else

{

for(int i=1;i<=m;i++)

{

flag=1;

++death;

for(int j=1;j

if(a[j]>i)

{

flag=0;

break;

}

if(flag)

{

a[death]=i;

solve(m-i,death);

}

--death;

}

}

}

int main()

{

for(int i=1;i<=39;i++)

{

solve(i,0);

memset(a,0,sizeof(a));

b[i]=cnt;

cnt=0;

}

b[40]=37338;

b[41]=44583;

b[42]=53174;

b[43]=63261;

b[44]=75175;

b[45]=89134;

b[46]=105558;

b[47]=124754;

b[48]=147273;

b[49]=173525;

b[50]=204226;

while(cin>>n)

{

cout<

}

}

标签:cnt,death,正整数,递归,int,flag,50,整数,划分

来源: https://blog.csdn.net/cxoi9010/article/details/116381931

整数划分问题的递归算法-c语言,简单的整数划分问题(递归)相关推荐

  1. 怎么用c语言表示大整数的四则运算,用c语言编写大整数的四则运算,求大神

    用c语言编写大整数的四则运算,求大神 答案:3  信息版本:手机版 解决时间 2019-10-03 17:13 已解决 2019-10-03 01:32 用c语言编写大整数的四则运算,求大神 最佳答案 ...

  2. 整数阶贝塞尔函数c语言,第二类整数阶贝塞尔函数(诺伊曼函数)

    #include "stdio.h" #include "math.h" /****************************************** ...

  3. C语言字符串转换为整数(附完整源码)

    C语言字符串转换为整数 C语言字符串转换为整数完整源码 C语言字符串转换为整数完整源码 #include <assert.h> #include <stdio.h> #incl ...

  4. Bailian4117 简单的整数划分问题【整数划分+记忆化递归】

    4117:简单的整数划分问题 总时间限制: 100ms 内存限制: 65536kB 描述 将正整数n 表示成一系列正整数之和,n=n1+n2+-+nk, 其中n1>=n2>=->=n ...

  5. c++矩阵连乘的动态规划算法并输出_算法交流: 7215 简单的整数划分问题 【2.7基本算法之算法效率】...

    [题目描述]7215:简单的整数划分问题 by Oler17WA 将正整数n 表示成一系列正整数之和,n=n1+n2+-+nk, 其中n1>=n2>=->=nk>=1 ,k&g ...

  6. 百练 04 简单的整数划分问题

    百练 04 简单的整数划分问题 总时间限制: 内存限制: 100ms 65536kB 描述 将正整数nn表示成一系列正整数之和,n=n1+n2+-+nkn=n_1+n_2+-+n_k, 其中n1> ...

  7. C语言简单算法之A乘以B,求整数平均值,是不是胖了,输出各位数字

    C语言简单算法之A乘以B,求整数平均值,是不胖了,输出各位数字 1.题目一:A乘以B 1.实验代码 include<stdio.h> int main() {int A,B;scanf(& ...

  8. C语言简单题-求整数段和

    7-13 求整数段和 (10分) 给定两个整数A和B,输出从A到B的所有整数以及这些数的和. 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔. 输出格式: 首 ...

  9. C语言整数转字符串-递归算法

    整数转字符串的需求我们一直都有,这里使用递归跟大家演示一下: 上代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include ...

最新文章

  1. 【设计模式】四:开放-封闭原则
  2. 各种门锁的内部结构图_双核CUP,电镀真金把手,0.3秒开锁,欧瑞博智能门锁S2评测...
  3. linux中使用net方式连接网络,如何使用 Netplan 从终端连接到无线网络?
  4. 网络上的FreeBSD在线文档
  5. linux内核 header.s,Linux启动代码header.S研究
  6. 全选或者单选checkbox的值动态添加到div
  7. c ibatis mysql实例_[Java教程]java程序中的ibatis连接mySql的基本实例
  8. 快速求幂(Quick Exponentiation)
  9. 【通信原理课程设计】8PSK调制解调技术的设计与仿真(MATLAB)
  10. PHPer转战Android的学习过程以及Android学习
  11. 实验吧Web-易-简单的sql注入之3(报错的sql盲注之exp)
  12. 【学习笔记】multiset+multimap之equal_range、upper_bound、lower_bound、count
  13. 金橙子激光打标机的二次开发(C#)
  14. Opencv之人脸识别
  15. ApplePay 支付开发
  16. EpsonL360清零软件+清零方法
  17. 一个 丧心病狂 的开源项目
  18. 基于C++实现惊险刺激的Flappy Bird设计
  19. Ubuntu查看并修改DNS
  20. 关于Centos7 下df -h 无响应

热门文章

  1. 高一数学集合知识点整理_高一数学知识点总结
  2. AXI_04 AXI_LITE_MASTER_IP设计与验证
  3. python程序详细描述_如何逐行描述Python代码?
  4. python条件替换_Python中Numpy条件替换操作一例
  5. 二极管为什么单向导电?
  6. mysql 安装 utf8mb4_mysql 安装和修改编码(utf8mb4)
  7. FPGA串口(UART)通信协议制定与设计思路详解示例
  8. mysql dba工作笔记pdf_社区专家在线:Oracle数据库、MySQL、Db2 等数据库日常运维故障与性能调优在线答疑...
  9. mysql导入多个txt_MySQL批量导入Excel、txt数据
  10. 大屏网页手机缩放html,大屏页面三种缩放