数字拆分问题算法回溯_拆分自然数的几种算法
拆分自然数的几种算法
【问题描述】
自然数的拆分:
任何一个大于
1
的自然数
N
,
总可以拆分成若干个自然数之和,
并且有多种拆分方法。例如自然数
5
,可以有如下一些拆分方法:
【问题描述】
自然数的拆分:
任何一个大于
1
的自然数
N
,
总可以拆分成若干个自然数之和,
并且有多种拆分方法。例如自然数
5
,可以有如下一些拆分方法:
5=1+1+1+1+1
5=1+1+1+2
5=1+2+2
5=1+4
5=2+3
算法一
用回溯法来实现
针对所给问题,定义问题的解空间;如本题对
5
的拆分来说,
1<=
拆分的数
<=5
。
确定易
于搜索的解空间结构;如本题对
5
的拆分来说,用
x[]
数组来存储解,每个数组元素的取值
范围都是
1<=
拆分的数
<=5
,从
1
开始搜索直到
5
。
搜索解空间,并在搜索过程中用剪枝函
数避免无效搜索。
如本题对
5
的拆分来说,
为了避免重复,
x>=x[j](i>j)
,
如
x[]={2,3}
满足条
件而
x[]={3,2}
就不满足条件不是可行解即无效。
#include
#include
void
splitN(
int
n,
int
m);
//
n
是需要拆分的数,
m
是拆分的进度。
int
x[1024]={0},total=0 ;
//
total
用于计数拆分的方法数,
x[]
用于存储解
void
main()
{
int
n ;
printf(
"please input the natural number n:"
);
scanf(
"%d"
,&n);
splitN(n,1);
printf(
"There are %d ways to split natural number %d. "
,total,n);
}
void
splitN(
int
n,
int
m)
{
//n
是需要拆分的数,
m
是拆分的进度
int
rest,i,j;
for
(i=1;i<=n;i++)
{
//
从
1
开始尝试拆分
if
(i>=x[m-1])
{
//
拆分的数大于或等于前一个从而保证不重复
x[m]=i ;
//
将这个数计入结果中
rest=n-i
;
//
剩下的数是
n-i
,如果已经没有剩下的了,并且进度
(
总的拆分个数
)
大于
数字拆分问题算法回溯_拆分自然数的几种算法相关推荐
- rrt算法流程图_基于RRT的运动规划算法综述
基于 RRT 的运动规划算法综述 1. 介绍 在过去的十多年中, 机器人的运动规划问题已经收到了大量的关注, 因为机器人开始成 为现代工业和日常生活的重要组成部分. 最早的运动规划的问题只是考虑如何移 ...
- 机器学习算法 拟合曲线_制定学习曲线以检测机器学习算法中的错误
机器学习算法 拟合曲线 机器学习 (Machine Learning) The learning curve is very useful to determine how to improve th ...
- 聚类算法 距离矩阵_论文阅读9——AP聚类算法
Affinity Learning for Mixed Data Clustering 论文提出了基于混合对数据进行聚类的学习框架,具体研究内容包括:1)如何处理具有混合类型属性的数据.2)如何学习数 ...
- otsu阈值分割算法原理_大津二值化算法OTSU的理解
otsu 大津算法介绍: OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法. 利用阈值将原图像分成前景,背景两个图象. 前景:用n1,csum,m1来表示在当前阈值下的 ...
- 3算法全称_全网最通俗的KMP算法图解
导语 本篇内容研究字符串匹配问题,首先介绍字符串匹配问题,引出Brute-Force算法及其优化方法,最后深入详解KMP算法.文章结构如下(全文阅读需要30分钟左右): 字符串匹配问题 1字符串匹配问 ...
- fp算法例题_机器学习(九)—FP-growth算法
本来老师是想让我学Hadoop的,也装了Ubuntu,配置了Hadoop,一时间却不知从何学起,加之自己还是想先看点自己喜欢的算法,学习Hadoop也就暂且搁置了,不过还是想问一下园子里的朋友有什么学 ...
- python路径规划算法可视化_路径规划问题:DIJKSTRA算法 以及Python实现
一. DJKSTRA算法概述 我们可以将地图抽象为Graph的数据结构,然后利用Graph的广度优先遍历算法(Breadth-First Search, BFS)解决无权重的High-Level的地图 ...
- 三维图形几何变换算法实验_基于深度学习的三维重建算法综述
点击上方"计算机视觉life",选择"星标" 快速获得最新干货 00 前言 目前,三维重建技术已在游戏.电影.测绘.定位.导航.自动驾驶.VR/AR.工业制造以 ...
- 遗传算法是一种进化算法_我是如何设计一种算法的,该算法混合了到您镇上的乐队的播放列表...
遗传算法是一种进化算法 by Sina Habibian 通过新浪Habibian 我是如何设计一种算法的,该算法混合了到您镇上的乐队的播放列表 (How I designed an algorith ...
最新文章
- python递归算法 电影院票价问题_算法课堂实验报告(二)——python递归和分治(第k小的数,大数乘法问题)...
- @Quelifier的用法,
- Java注解Annotation详解
- python遍历字典方法总结
- tomcat端口冲突解决 Address already in use: JVM_Bind :8080
- C# Socket服务器及多客户端连接应用例程
- 0-1背包问题(物品不可分割)
- BigDecimal 运用示例 与 DecimalFormat
- 单片机定时器实验两位倒计时秒表_51单片机基础与应用8天速成(三)
- Android数据存储——内部存储
- C# 特性(Attribute)学习
- Leetcode 946.验证栈序列
- iOS 创建单例的方法
- 《移动App测试的22条军规》—App测试综合案例分析23.5节测试微信App的用户体验...
- Bootstrap基础九辅助类
- python将数据写入txt文本文件
- hadoop 下载慢的解决方案
- oracle里每年第一天,SQL和Oracle获取每周、每月、每年第一天和最后一天
- 对象存储界的“百变星君”来了,非结构化数据存储还是事儿吗?
- 今日头条笔试之字母交换
热门文章
- JavaScript字符串大小写转换
- 10倍效率提升的低代码IDE
- Uipath 处理excel转PDF或者合并PDF(excel to pdf, join pdf files)
- 6.4.1.4.1 General
- Nand Flash驱动, ECC, MTD, FTL, 文件系统
- Freeswitch+Sip.js 早期媒体(回铃音)
- css 蒙版效果_CSS蒙版的过渡效果
- 像企业账号一样分发安装应用
- 为什么 TCP 三次握手期间,客户端和服务端的初始化序列号要求不一样?
- 如何搭建一个属于自己的网站(使用宝塔面板)