整数划分问题的递归算法-c语言,简单的整数划分问题(递归)
描述
将正整数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语言,简单的整数划分问题(递归)相关推荐
- 怎么用c语言表示大整数的四则运算,用c语言编写大整数的四则运算,求大神
用c语言编写大整数的四则运算,求大神 答案:3 信息版本:手机版 解决时间 2019-10-03 17:13 已解决 2019-10-03 01:32 用c语言编写大整数的四则运算,求大神 最佳答案 ...
- 整数阶贝塞尔函数c语言,第二类整数阶贝塞尔函数(诺伊曼函数)
#include "stdio.h" #include "math.h" /****************************************** ...
- C语言字符串转换为整数(附完整源码)
C语言字符串转换为整数 C语言字符串转换为整数完整源码 C语言字符串转换为整数完整源码 #include <assert.h> #include <stdio.h> #incl ...
- Bailian4117 简单的整数划分问题【整数划分+记忆化递归】
4117:简单的整数划分问题 总时间限制: 100ms 内存限制: 65536kB 描述 将正整数n 表示成一系列正整数之和,n=n1+n2+-+nk, 其中n1>=n2>=->=n ...
- c++矩阵连乘的动态规划算法并输出_算法交流: 7215 简单的整数划分问题 【2.7基本算法之算法效率】...
[题目描述]7215:简单的整数划分问题 by Oler17WA 将正整数n 表示成一系列正整数之和,n=n1+n2+-+nk, 其中n1>=n2>=->=nk>=1 ,k&g ...
- 百练 04 简单的整数划分问题
百练 04 简单的整数划分问题 总时间限制: 内存限制: 100ms 65536kB 描述 将正整数nn表示成一系列正整数之和,n=n1+n2+-+nkn=n_1+n_2+-+n_k, 其中n1> ...
- C语言简单算法之A乘以B,求整数平均值,是不是胖了,输出各位数字
C语言简单算法之A乘以B,求整数平均值,是不胖了,输出各位数字 1.题目一:A乘以B 1.实验代码 include<stdio.h> int main() {int A,B;scanf(& ...
- C语言简单题-求整数段和
7-13 求整数段和 (10分) 给定两个整数A和B,输出从A到B的所有整数以及这些数的和. 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔. 输出格式: 首 ...
- C语言整数转字符串-递归算法
整数转字符串的需求我们一直都有,这里使用递归跟大家演示一下: 上代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include ...
最新文章
- 【设计模式】四:开放-封闭原则
- 各种门锁的内部结构图_双核CUP,电镀真金把手,0.3秒开锁,欧瑞博智能门锁S2评测...
- linux中使用net方式连接网络,如何使用 Netplan 从终端连接到无线网络?
- 网络上的FreeBSD在线文档
- linux内核 header.s,Linux启动代码header.S研究
- 全选或者单选checkbox的值动态添加到div
- c ibatis mysql实例_[Java教程]java程序中的ibatis连接mySql的基本实例
- 快速求幂(Quick Exponentiation)
- 【通信原理课程设计】8PSK调制解调技术的设计与仿真(MATLAB)
- PHPer转战Android的学习过程以及Android学习
- 实验吧Web-易-简单的sql注入之3(报错的sql盲注之exp)
- 【学习笔记】multiset+multimap之equal_range、upper_bound、lower_bound、count
- 金橙子激光打标机的二次开发(C#)
- Opencv之人脸识别
- ApplePay 支付开发
- EpsonL360清零软件+清零方法
- 一个 丧心病狂 的开源项目
- 基于C++实现惊险刺激的Flappy Bird设计
- Ubuntu查看并修改DNS
- 关于Centos7 下df -h 无响应
热门文章
- 高一数学集合知识点整理_高一数学知识点总结
- AXI_04 AXI_LITE_MASTER_IP设计与验证
- python程序详细描述_如何逐行描述Python代码?
- python条件替换_Python中Numpy条件替换操作一例
- 二极管为什么单向导电?
- mysql 安装 utf8mb4_mysql 安装和修改编码(utf8mb4)
- FPGA串口(UART)通信协议制定与设计思路详解示例
- mysql dba工作笔记pdf_社区专家在线:Oracle数据库、MySQL、Db2 等数据库日常运维故障与性能调优在线答疑...
- mysql导入多个txt_MySQL批量导入Excel、txt数据
- 大屏网页手机缩放html,大屏页面三种缩放