zoukankan      html  css  js  c++  java
  • 算法竞赛入门经典 学习笔记

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

    这几天在博客上已经积累了几道搜索和贪心的题目,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
    ", 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
    ", k, x, y);
            }
        }
        return 0;
    }

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

  • 相关阅读:
    Jzoj5417 方阵
    Jzoj5414 幸运值
    PAT甲级——A1036 Boys vs Girls
    PAT甲级——A1035 Password
    PAT甲级——A1030 Travel Plan
    PAT甲级——A1026 Table Tennis
    PAT甲级——A1022 Digital Library
    PAT甲级——A1018 Public Bike Management
    PAT甲级——A1021 Deepest Root
    PAT甲级——A1020 Tree Traversals
  • 原文地址:https://www.cnblogs.com/virusdefender/p/3417032.html
Copyright © 2011-2022 走看看