博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(笔试题)和一半的组合数
阅读量:4520 次
发布时间:2019-06-08

本文共 689 字,大约阅读时间需要 2 分钟。

题目:

若对于整数N,在集合{1,2……,N}中找出m个数,使其和等于剩下的N-m个数的和。返回所有可能的组合数,N<10000(不能使用任何库函数)。

思路:

组合问题都可以通过回溯法+剪枝来解决

根据题目的意思,其实就是将1-N分为和相等的两半,其满足的前提条件是1-N的总和为偶数(只有偶数才能分成相等的两份)。

在满足总和为偶数的情况下,就通过回溯法来求组合的可能性,适当的剪枝可以减小复杂度。

代码:

#include
#include
using namespace std;#define N 8int count=0;void Sum(int *nums,vector
out,int sum,int total,int n,int idx){ if(idx>n || (sum*2)>total) return; if(sum*2==total){ for(vector
::iterator it=out.begin();it!=out.end();it++) cout<<*it<<" "; cout<
out; int total=(1+N)*N/2; if(total%2==0){ Sum(a,out,0,total,N,0); cout<<"Total Count is "<
<

运行结果:

转载于:https://www.cnblogs.com/AndyJee/p/4528122.html

你可能感兴趣的文章
JAVA wait()和notifyAll()实现线程间通讯
查看>>
python全栈脱产第11天------装饰器
查看>>
koa2 从入门到进阶之路 (一)
查看>>
Java / Android 基于Http的多线程下载的实现
查看>>
求职历程-----我的简历
查看>>
[总结]数据结构(板子)
查看>>
网页图片加载失败,用默认图片替换
查看>>
C# 笔记
查看>>
android 之输入法
查看>>
编译参数-ObjC的说明
查看>>
配置Synergy(Server : XP, client: Win7)
查看>>
Hadoop集群(第7期)_Eclipse开发环境设置
查看>>
Mysql 多表查询详解
查看>>
Ubuntu下tensorboard的使用
查看>>
门面模式
查看>>
Navicat Premium 10/12——破解激活
查看>>
【leetcode❤python】 290. Word Pattern
查看>>
Mysql备份还原数据库之mysqldump实例及参数详细说明 -转自http://www.cnblogs.com/xuejie/archive/2013/01/11/2856911.html...
查看>>
2013年10月13日学习:SQL通过命令语句来创建表
查看>>
剑指offer : 二维数组中的查找
查看>>