面试题:输入两个整数 n 和 m,从数列1,2,3…….n 中 随意取几个数, 使其和等于 m
问题:
2010年中兴面试题
编程求解:
输入两个整数 n 和 m,从数列1,2,3…….n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.
思路:
类似这种组合问题一般都是使用递归的策略,考虑到n个数和为m,假设要解决的函数为f(n,m), 假设我们选择了第n个数,那么问题就变成了f(n-1,m-n),
否则的话问题就是f(n-1,m), 再考虑下边界条件: 如果n<1 或者 m<1显然不会有结果, 如果n==m,那么显然可以输出一个结果了,然后问题就变成了f(m-1,m)
所以初步写的代码如下:
vector<int> queueV;
void findSum(int n, int m)
{
if(n< || m<)
return;
if(m==n)
{
vector<int>::iterator it;
for(it = queueV.begin(); it!=queueV.end(); ++it)
{
cout << *it << ' ';
}
cout << m << endl;
n = m-; //从剩下的1~m-1中寻找值为m的数列
}
queueV.push_back(n);
findSum(n-, m-n);
queueV.pop_back();
findSum(n-, m);
}
不过这个代码涉及到了很多可以避免的压栈出栈和递归等操作,会浪费比较多的时间,所以优化的版本如下:
vector<int> queueV;
void findSum2(int n, int m)
{
if(n< || m<)
return;
if(m>n)
{
queueV.push_back(n);
findSum(n-, m-n);
queueV.pop_back();
findSum(n-, m);
}
else
{
vector<int>::iterator it;
for(it = queueV.begin(); it!=queueV.end(); ++it)
{
cout << *it << ' ';
}
cout << m << endl;
findSum(m-, m);
}
}
面试题:输入两个整数 n 和 m,从数列1,2,3…….n 中 随意取几个数, 使其和等于 m的更多相关文章
- 【编程题目】输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数, 使其和等于 m ... ★
第 21 题(数组)2010 年中兴面试题编程求解:输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来. 我的思路: 从小 ...
- 输入两个整数n 和m,从数列1,2,3.......n 中任意取几个数, 使其和等于m ,要求将当中全部的可能组合列出来
中兴面试题之中的一个.难度系数中. 题目描写叙述例如以下:输入两个整数n 和m,从数列1,2.3.......n 中任意取几个数, 使其和等于m ,要求将当中全部的可能组合列出来. 逻辑分析: 1.比 ...
- 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m
题目:编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m.要求将所有的可能组合列出来. 分析:分治的思想.可以把问题(m,n)拆分(m - n, n -1)和(m, n ...
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来
import java.util.LinkedList; import java.util.Scanner; public class Main { private static LinkedList ...
- ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
1057: 输入两个整数,求他们相除的余数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 177 Solved: 136[Submit][Status ...
- c++作业:输入两个整数,用函数求两数之和。函数外部声明有什么作用?
#include <iostream> using namespace std; int main(){ //求两数的和? int a,b,s; cout<<"请你输 ...
- JS写一个简单的程序,输入两个整数,打印这两个数的和,差,积,余数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 华为OJ平台试题 —— 数组:输入n个整数,输出当中最小的k个
输入n个整数.输出当中最小的k个: 代码: /* * 输入n个整数,输出当中最小的k个. * 输入说明:1.输入两个整数:2.输入一个整数数组 * 输出说明:输出一个整数数组 */ <p ...
- 输入n个整数,输出其中最小的k个
描述 输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int * pInputArray, unsigned ...
随机推荐
- pytorch文档阅读(一)
本章主要针对pytorch0.4.0英文文档的前两节,顺序可能有些不一样: torch torch.Tensor 张量 Tensors Data type CPU tensor GPU tensor ...
- SPSS数据类型:测量字段、角色字段
一:测量字段 • 默认值.具有未知存储类型和值的数据(例如,由于其尚未被读取)将显示为<默认值>. • 连续.用于描述整数.实数或日期/时间等数字值,如范围 0 - 100 或 0.75 ...
- ElasticStack系列之十二 & 搜索结果研究
问题 使用 ElasticSearch 做搜索 时,比如用户输入 --> 柠檬,搜出来的结果 --> 柠檬汽水,柠檬味牙膏等在前面,真正想要的水果那个 柠檬 在后面.已经在中文分词中加了 ...
- ElasticStack系列之八 & _source 字段
有很多人会有这样的一个疑问: _source字段存储的是索引的原始内容,那 store 属性的设置是为何呢?elasticsearch 为什么要把 store 的默认取值设置为 no?设置为 yes ...
- [大数据]-Fscrawler导入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1并配置同义词过滤
fscrawler是ES的一个文件导入插件,只需要简单的配置就可以实现将本地文件系统的文件导入到ES中进行检索,同时支持丰富的文件格式(txt.pdf,html,word...)等等.下面详细介绍下f ...
- VS2010(32bit) + WIN7(64bit) 编译出不同平台程序版本
一.X86,即一般普通PC上跑的程序版本,不用修改工程属性 二.X64 1.设置工程平台---会在工程目录下生成 X64 文件夹 在工具栏--->生成--->配置管理器 窗口 设置“活动 ...
- android 低功耗蓝牙使用
参考链接:http://blog.csdn.net/xubin341719/article/details/38584469 1.android 手机的低功耗蓝牙,又称BLE :BLE在andriod ...
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第七部分(Page 12)
编写你的第一个 Django app,第七部分(Page 12)转载请注明链接地址 本节教程承接第六部分(page 11)的教程.我们继续开发 web-poll应用,并专注于自定义django的自动生 ...
- Rolling in the Deep (Learning)
Rolling in the Deep (Learning) Deep Learning has been getting a lot of press lately, and is one of t ...
- [JQuery代码]超酷鼠标滑过背景高亮效果
1.效果及功能说明 鼠标滑过悬停特效,div css制作产品列表图片布局通过鼠标滑过产品图片背景高亮闪烁显示,产品标题滑动显示或隐藏 2.实现原理 首先定义好一个重复实现效果的方法,然后定义光带出现速 ...