C++ 分糖果问题-求一组数的最大公倍数
2015-09-17 08:32
302 查看
给各个部门分糖果,满足以下要求:
1. 各个部门分的糖果数一样
2. 各个部门分得的糖果能平均分配
3. 公司总共15个部门
4. 糖果数最少
输入:需要分配的部门个数和各个部门的人数
输出:每个部门的糖果数目
示例:
输入:部门数目:5 各个部门人数:4 2 3 4 5
输出:60
方法:该题目间接求各个部门人数的最小公倍数。递归计算,求n个数的最小公倍数,相当于求第一个数和剩下n-1个数的最小公倍数。
1. 各个部门分的糖果数一样
2. 各个部门分得的糖果能平均分配
3. 公司总共15个部门
4. 糖果数最少
输入:需要分配的部门个数和各个部门的人数
输出:每个部门的糖果数目
示例:
输入:部门数目:5 各个部门人数:4 2 3 4 5
输出:60
方法:该题目间接求各个部门人数的最小公倍数。递归计算,求n个数的最小公倍数,相当于求第一个数和剩下n-1个数的最小公倍数。
#include <iostream> //计算两个数的最小公倍数 long int _allocation_tangguo(long int param1,int param2){ long int temp = 0; if (param1 < param2) { temp = param2; param2 = param1; param1 = temp; } long int p = param1*param2; while (param2!=0) { temp=param1%param2; param1=param2; param2=temp; } return p/param1; } //递归求解 long int allocation_tangguo(int num,int* param1){ if(num == 2){ return _allocation_tangguo(*(param1),*(num+param1-1)); } else { int *param2 = param1+1; return _allocation_tangguo(allocation_tangguo(num-1, param2),*param1); } } //测试函数 int main(){ int num; int i[15]; std::cout <<"请输入部门数目:"<<std::endl; std::cin >> num; std::cout <<"请输入各个部门人数:"<<std::endl; for (int j = 0;j<num;j++) { std::cin >> i[j]; } long int n = allocation_tangguo(num,i); std::cout << "各个部门分发的糖果数量:" << n ; return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C++联合体转换成C#结构的实现方法
- C#中的尾递归与Continuation详解
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例