经典算法C++版(参考一线码农博文)

鉴于一线码农的算法博文基本通过C#完成,此处用C++再实现一遍,具体解法可参考其博文。

地址:http://www.cnblogs.com/huangxincheng/category/401959.html。

1.百钱买百鸡(降低时间复杂度)

void NumofHen_1()
{
    int x, y, z;
    for ( x = 1; x < 20; x++)
    {
        for ( y = 0; y < 33; y++)
        {
            z = 100 - x - y;

            if ((z % 3 == 0) && ((5 * x + 3 * y + z / 3) == 100))
            {
                cout << "公鸡:" << x << " 母鸡:" << y << " 小鸡:" << z << endl;
            }
        }
    }
}

void NumofHen_2()
{
    int x, y, z;
    for (size_t k = 0; k < 4; k++)
    {
        x = 4 * k;
        y = 25 - 7 * k;
        z = 75 + 3 * k;
        cout << "公鸡:" << x << " 母鸡:" << y << " 小鸡:" << z << endl;
    }
}

2.五家五井(不定方程组,运用数据为整数特性)

代码省略,详情见一线码农相应博客。

3.猴子吃桃(尾递归)

题目:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾又多吃了一个。

以后每天都吃前一天剩下的一半再加一个。到第10天刚好剩一个。问猴子第一天摘了多少个桃子?

int SumPeach1(int day)
{
    if (day == 10)
        return 1;
    else return 2 * SumPeach1(day + 1) + 2;
}

void NumofPeach_1()
{
    int sum = SumPeach1(1);
    cout << "桃子数目:" << sum << endl;
}

//尾递归(剑指offer上有类似题目,判定二叉树是否平衡)
int SumPeach_2(int day, int sum)
{
    if (day == 10)
        return sum;
    else return SumPeach_2(day + 1, 2 * sum + 2);
}

void NumofPeach_2()
{
    int sum = SumPeach_2(1, 1);
    cout << "桃子数目:" << sum << endl;
}

尾递归将每次计算结果进行传递,但是具体效果得看编译器是否进行了相应优化。

此题还有更为简单的做法,具体为参考每次计算数值的规律性,与2的次方存在对应关系。

时间: 2024-07-31 23:33:11

经典算法C++版(参考一线码农博文)的相关文章

wpf笔记(读一线码农8天入门wpf)

****************基础****************●引入命名空间 xmlns:local="clr-namespace:DataTemplate"●StaticResource静态资源相当于常量,编译后值不改变 {StaticResource ResourceKey=mystyle}●DynamicResource动态资源相当于变量,编译后值可改变 {DynamicResource ResourceKey=mystyle}●Binding绑定 Text="{

培训码农怎么招惹你们科班码农了?

刚入行没多长时间的时候就想写类似的博文,大街小巷行内都充斥着,“哟看,他是X鸟,他是X内的.”这种怪异的想法. 首先我们是培训出来的,你们是科班毕业的,但是不还是跟我们一样坐在一线码农的位置上么?如果你科班毕业直接是中层领导,我无话可说.但是我们都在一个起跑线上,你没有资格鄙视我. 其次,现在培训行业的确很流氓,这个是因为一些市场原因和教育资源的原因等几方面造成的. 现在学生简历造假,这个事情应该发生部分地区,作为前辈的确有必要和义务去阻止以及谴责这样的行为,两个陌生人的第一次诚信就在这一张纸上

转:码农翻身全年文章精华

在码农翻身公众号写了一年多, 最大的体会就是:原创真心不易! 每天思考的最大问题就是: 下一篇文章写啥? 在大家的支持和鼓励下,还是坚持了下来,  回头看看走过的路,这一年过得还算充实. 很快就要过年了, 我也要休息一下, 春节后重新出发 ! 我把这一年来的精华文章整理了一下,作为节前的最后一篇, 欢迎转发分享. 再次感谢大家一年来的陪伴, 预祝大家春节快乐,万事如意! 大话编程 我是一个线程 我是一个Java class Javascript: 一个屌丝的逆袭 Java:一个帝国的诞生 JSP

非专业码农 JAVA学习笔记 6java工具类和算法-string

续<非专业码农 JAVA学习笔记 5 java工具类和算法> 五.字符串string 字符串和字符的差别:字符串双引号括起来”n”,字符用单引号括起来,表示一种符号’\n’ 1.string的主要方法和属性 类 方法或者属性 备注 定义string Stirng s=new string(“值”),string s=”值” 属性 string.length:string的长度为字节 方法startswith,endswith s.startwith(“值”)-以值为开头,s.endswith(

C语言100个经典算法源码片段

将写内容过程中比较常用的内容备份一次,下边内容段是关于C语言100个经典算法片段的内容. C语言的学习基础,100个经典的算法 C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数 为多少? 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 程序源代码: main() { long

经典排序算法 — C# 版(上)

提起排序,与我们的息息相关,平时开发的代码少不了排序. 经典的排序算法又非常多,我们怎么评价一个排序算法的好坏呢? 其实可以这样想,要细致的比较排序算法好坏,那我们就从多方面尽可能详细的对比 一.效率方面 1.排序算法的执行效率:最好.最坏.平均 2. 我们之前舍弃的时间复杂度的系数.常量.低阶,在这里需要拿回来 3.排序,免不了比较和移动 二.内存消耗方面 没错就是 算法的空间复杂度,不过对于排序的空间复杂度来说,又赋予了新的名词 — 原地排序. 顾名思义是 原地排序的肯定是消耗内存少,反之需

写给立志做码农的大学生(蘑菇街你都挂了,你还要面腾讯? 我去,我一定要去)

先简单介绍一下我自己,我是一所普通大学的本科生,大学录取时的专业是非计算机系的,在大一下学期意识到自己喜欢敲代码以后,就提交了转专业申请.大二起开始在计算机系学习.大三时(2015年4月)拿到了腾讯暑期实习的offer,暑期实习的过程中获得留用offer,大四没跑秋招,几乎就在学校浪荡了一年. 我不是大牛,不是来传播鸡汤或成功学的,只是最近有感于学弟学妹们在学习以及规划方面严重不足,觉得这是一个共性问题,遂捉起纸笔,写点东西. 1. 确定方向 1.1 选择比努力更重要 关于方向的选择其实越早确定

写给立志做码农的大学生

先简单介绍一下我自己,我是一所普通大学的本科生,大学录取时的专业是非计算机系的,在大一下学期意识到自己喜欢敲代码以后,就提交了转专业申请.大二起开始在计算机系学习.大三时(2015年4月)拿到了腾讯暑期实习的offer,暑期实习的过程中获得留用offer,大四没跑秋招,几乎就在学校浪荡了一年. 我不是大牛,不是来传播鸡汤或成功学的,只是最近有感于学弟学妹们在学习以及规划方面严重不足,觉得这是一个共性问题,遂捉起纸笔,写点东西. 1. 确定方向 1.1 选择比努力更重要 关于方向的选择其实越早确定

老码农谈NDK开发

关于NDK,我也天真过 5.6年前刚拿到HTC的G1开始做Android开发时,得知Java可以和C混编激动不已,真的是拿到钥匙见什么都是锁,老想着用NDK做些事情.到后来公司做了一个带有强烈技术风格的业务决策,我被迫把NDK来回折腾了很长时间,也没能折腾出什么成果,但这个决策却把公司折腾完蛋,我也就对NDK渐渐心恢意冷了,真正体会到,做业务,服务用户为主,技术上,好用是王道. 今天收到一封邮件(来自:[email protected]),让我谈谈NDK,真的挠到了我的痒处,一直有些话是想跟对N