编程练习:求和为指定数字的所有组合

来源:互联网 发布:父与子编程之旅 微盘 编辑:程序博客网 时间:2024/06/05 03:54

转自:求和为指定数字的所有组合

问题描述:

  第一个问题:输入两个整数 n 和 m,从数列1,2,3…….n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.

  第二个问题:程序中还亲自验证了这样一个问题:

char var[10] = {1,2,3,4,5,6,7,8,9,10};int test(char var[]){    return (sizeof(var));}

  问调用 test(char)输出多少?
  候选:9,10,4,11

解决思路:

一小问:
  解法:采用0-1背包的思想,使用递归方法:
  当选择n时,就用剩下的n-1填满 m-n;
  当不选择n是,就用剩下的n-1填满m;
注意的是,当m=n时,即找到了符合条件的解。
终止条件:当剩余求和小于0或无候选集
二小问
  真正结果是:4
  解释:sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
MSDN上的解释为:
  The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t.
  结合《程序员面试宝典(第三版)》P58页原题理解,此处的char[]已经退化为一个指针,所以sizeof指针是32位地址,即4字节

程序实现:

/*解法: 采用0-1背包的思想,使用递归方法:    当选择n时,就用剩下的n-1填满 m-n;        当不选择n是,就用剩下的n-1填满m;        注意的是,当m=n时,即找到了符合条件的解        转自:http://www.cnblogs.com/dandingyy/archive/2012/09/26/2704728.html        QiYe005  2016.10.3*/#include<iostream>#include<list>using namespace std;list<int> list1;    //记录选择了哪些,即背包里有哪些int totalSolveNum=0;    //回答一共有多少种方案全局变量void find(int sum, int n){    //递归出口    if (sum <= 0 || n <= 0)        return;    //输出找到的结果    if (sum == n)    //表示找到了一个值    {        for (list<int>::reverse_iterator i = list1.rbegin(); i != list1.rend(); i++)        {            cout << *i << " ";            totalSolveNum++;        }           cout << n << endl;    }    list1.push_front(n);    find(sum - n, n - 1);    //如果放入n,则从剩余n-1个数中填满sum-n    list1.pop_front();    find(sum, n - 1);        //如果不放入n,从n-1个数中填满sum}//选择题自己尝试输出char var[10];int test(char var[]){    return (sizeof(var));}int main(){    int sum, n;    sum = 6;    n = 8;    find(sum, n);    cout << "总解个数为" << totalSolveNum<< endl;    //选择题自己测试    cout << "sizeof(var)其中char var[10]输出结果为" << test(var) << endl;    system("pause");    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 工行证书介质已被锁定怎么办 学历认证是假的怎么办 怕被公司查学历怎么办 淘宝玩具没有怎么办3c 家庭遭遇小三我该怎么办 老公出轨把小三带回家了怎么办 小三怀孕了怎么办准生证 小三怀孕了起诉怎么办 不知情做了小三怎么办 发现自己被三了怎么办 被扇巴掌脸肿了怎么办 分到上海市金鼎学校怎么办 被列入维稳对象怎么办? 资金涉及诈骗案冻结了怎么办 小米浏览器浏览记录找不到了怎么办 米聊账号封了怎么办 管家婆创业版管理员忘记密码怎么办 手机不记得密码了怎么办 手机不记得开锁密码怎么办 oppo手机不记得密码怎么办 电脑密码不记得了怎么办 vivo手机不记得密码了怎么办 运管把车扣了怎么办 大学通选课挂科怎么办 通识必修课挂了怎么办 我想开3d艺术馆怎么办 档案回原籍报到证怎么办 服刑的人孩子上学怎么办 长沙终身教育网用户名忘记了怎么办 乡下卖服装没生意怎么办 没能力没学历该怎么办 没有学历的我该怎么办 补过的牙掉了怎么办 法院判完被告不给钱怎么办 b证到期未继续教育怎么办 宝宝上幼儿园中午要用尿不湿怎么办 嫁到北京农村怎么办居住证 2020年没脱贫的农民怎么办 2020年农民的土地怎么办 车停在停车场被划怎么办 专升本差两分怎么办