元编程算法示例
来源:互联网 发布:python写入excel 编辑:程序博客网 时间:2024/06/06 17:40
- 枚举思想
- 鸡兔同笼问题
- 递推思想
- 斐波那契数列
- 递归思想
- 阶乘问题
- 分治思想
- 寻找假币问题
枚举思想
鸡兔同笼问题
// 主模板template <int Head, int Feet, int Index = 1, bool Condition = false>struct ChickRabbit { enum { Chicken = ChickRabbit<Head, Feet, Index+1, (2*Index+4*(Head-Index) == Feet)>::Chicken, Rabbit = ChickRabbit<Head, Feet, Index+1, (2*Index+4*(Head-Index) == Feet)>::Rabbit };};// 递归终止模板template <int Head, int Feet, int Index>struct ChickRabbit<Head, Feet, Index, true> { enum { Chicken = Index-1, Rabbit = Head-Chicken };};// 测试鸡兔同笼模板void testMP_CR() { // 头30,足72 // 鸡24,兔6 // 测试通过 cout << "Head 30, Feet 72" << endl; cout << "Chicken:" << ChickRabbit<30, 72>::Chicken << endl; cout << "Rabbit:" << ChickRabbit<30, 72>::Rabbit << endl; // 头50,足140 // 鸡30,兔20 // 测试通过 cout << "Head 50, Feet 140" << endl; cout << "Chicken:" << ChickRabbit<50, 140>::Chicken << endl; cout << "Rabbit:" << ChickRabbit<50, 140>::Rabbit << endl; // 错误数据测试,会给出负数结果 cout << "Head 30, Feet 14" << endl; cout << "Chicken:" << ChickRabbit<30, 14>::Chicken << endl; cout << "Rabbit:" << ChickRabbit<30, 14>::Rabbit << endl;}
递推思想
斐波那契数列
// 主模板template <int N>struct Fibonacci { enum { number = Fibonacci<N-1>::number + Fibonacci<N-2>::number };};// 特化递归终止模板template <>struct Fibonacci<0> { enum { number = 0 };};// 特化递归终止模板template <>struct Fibonacci<1> { enum { number = 1 };};// 测试斐波那契数列void testMP_Fibonacci() { cout << "Fibonacci 0~12:" << endl; cout << "Fibonacci<0>::number:" << Fibonacci<0>::number << endl; cout << "Fibonacci<1>::number:" << Fibonacci<1>::number << endl; cout << "Fibonacci<2>::number:" << Fibonacci<2>::number << endl; cout << "Fibonacci<3>::number:" << Fibonacci<3>::number << endl; cout << "Fibonacci<4>::number:" << Fibonacci<4>::number << endl; cout << "Fibonacci<5>::number:" << Fibonacci<5>::number << endl; cout << "Fibonacci<6>::number:" << Fibonacci<6>::number << endl; cout << "Fibonacci<7>::number:" << Fibonacci<7>::number << endl; cout << "Fibonacci<8>::number:" << Fibonacci<8>::number << endl; cout << "Fibonacci<9>::number:" << Fibonacci<9>::number << endl; cout << "Fibonacci<10>::number:" << Fibonacci<10>::number << endl; cout << "Fibonacci<11>::number:" << Fibonacci<11>::number << endl; cout << "Fibonacci<12>::number:" << Fibonacci<12>::number << endl;}
递归思想
阶乘问题
// 主模板template <int N>struct Factorial { enum { number = N*Factorial<N-1>::number };};// 递归终止模板template <>struct Factorial<1> { enum { number = 1 };};// 测试阶乘void testMP_Factorial() { cout << "Factorial<5>::number:" << Factorial<5>::number << endl;}
分治思想
寻找假币问题
// 主模板template <int coin1 = 2, int coin2 = 2, int ... coins>struct FindCoin { enum { coinIndex = (coin1==coin2 ? 2+FindCoin<coins...>::coinIndex : FindCoin<coin1, coin2>::coinIndex) };};// 递归终止模板template <int coin1, int coin2>struct FindCoin<coin1, coin2> { enum { coinIndex = (coin1 >= coin2 ? 2:1) };};// 测试寻找假币void testMP_FindCoin() { // 定义硬币 const int coin1 = 2; const int coin2 = 2; const int coin3 = 2; const int coin4 = 2; const int coin5 = 2; const int coin6 = 1; const int coin7 = 2; const int coin8 = 2; const int coin9 = 2; const int coin10 = 2; // 得出结果 cout << "假币是第" << FindCoin<coin1, coin2, coin3, coin4, coin5, coin6, coin7, coin8, coin9, coin10>::coinIndex << "个" << endl;}
CSDN 辣鸡 MD 编辑器,无序列表格式全丢
阅读全文
0 0
- 元编程算法示例
- 元编程
- 元编程
- 元编程
- ES6学习——元数据(meta)编程:代理(Proxies)应用示例
- ES6学习——元数据(meta)编程:反射(Reflect)应用示例
- 【编程】编程中的“元”
- Decorator 简化元编程
- 初探模板元编程
- 元编程的应用
- 模板元编程
- Erlang 元编程
- C++模板元编程
- ruby元编程
- 模板元编程
- 关于元编程(Metaprogramming)
- 模板元编程
- C++模板元编程
- JAVA 基础定义 day1
- 微信小程序实战篇-下拉刷新与加载更多
- 元编程结构控制
- python及scikit-learn的安装
- fastjson 使用 string字符串转换成java的各种类型
- 元编程算法示例
- 电商平台静态资源(图片)一般及CDN解决方案(转载)
- 机器学习并行化(parallel machine learning)
- CentOS-5的yum源无法使用问题
- 静态库 .a 转成共享库 .so
- 九度 题目1350:二叉树的深度
- 关于安卓无线定位与定位算法的讨论
- html5前端框架
- 开篇博客