码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-25 13:46:19      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

鉴于一线码农的算法博文基本通过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的次方存在对应关系。

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

标签:

原文地址:http://www.cnblogs.com/jason1990/p/4756894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!