算法竞赛入门经典 学习笔记

组长说应付蓝桥杯这一本书就够了,这几天看搜索还有贪心,真的是看题目一个都不会啊,然后看别人的代码还看不大懂。。哎,所以还是好好的学习吧。

这几天在博客上已经积累了几道搜索和贪心的题目,11月剩下的20天就都给搜索了。

-----------------------------

p114  7.1.1

代码

#include <stdio.h>
#include <string.h>


int func(int num1, int num2)
{
    char str1[6], str2[6];
    int i, j;

    //保存数字的频率
    int count[10] = { 0 };
    
    //转换数字为字符
    sprintf(str1, "%d", num1);
    sprintf(str2, "%d", num2);
    //如果i是四位数 也就是例子中0开头的
    if (strlen(str2) == 4)
    {
        for (i = 4; i >= 0; i--)
        {
            str2[i + 1] = str2[i];
        }
        str2[0] = '0';
    }

    for (i = 0; i < strlen(str1); i++)
    {
        count[str1[i] - '0']++;
    }
    for (j = 0; j < strlen(str2); j++)
    {
        count[str2[j] - '0']++;
    }

    for (i = 0; i < 10; i++)
    {
        if (count[i] > 1)
        {
            return 0;
        }
    }

    return 1;
    
}


int main()
{
    int n;
    int i;
    int num1;
    scanf("%d", &n);
    for (i = 1234; i <= 98765; i++)
    {
        num1 = n * i;
        if (num1 > 99999)
        {
            break;
        }
        else if (num1 < 10000)
        {
            continue;
        }
        else
        {
            if (func(num1, i))
            {
                printf("%d / %d = %d\n", num1, i, n);
            }
        }
    }

    return 0;
}

这个不算难,就不多说了。

 -------------------------------------

p115  7.1.2这个最大子序列的问题暴力的来搜索很简单的  但是优化算法真的很难 在《编程之美》中也有介绍

 

先mark  再看看http://www.ahathinking.com/archives/120.html

--------------------------------------

 p115 7.1.3  

这个题目只要就是要记住尽量减少减少暴力搜索的数字的个数,一定要想到题目后面分析的内容。

#include <stdio.h>
int main()
{
    int k, x, y;
    scanf("%d", &k);
    for (y = k + 1; y <= 2 * k; y++)
    {
        x = (k * y) / (y - k);
        if (x >= y)
        {
            printf("1 / %d = 1 / %d + 1 / %d\n", k, x, y);
        }
    }
    return 0;
}

----------------------------------

 

posted @ 2013-11-10 20:33  virusdefender  阅读(257)  评论(0编辑  收藏  举报