于航特训课:第一课

时间:2022-12-03 20:13:38

主办单位

      蓝桥杯全国软件和信息技术专业人才大赛组委会

课程时间

      3月4号-3月31

特训内容

  • 7次算法课,大赛特邀专家精讲历届真题及高频算法
  • 直至赛前,资深算法老师群内作业辅导和答疑
  • 全国参赛小伙伴互助带打
  • 第2次课《递归原理与构造技巧》开课时间:2018年3月7日晚上7:30

 

【课程简介】

    《2018蓝桥杯大赛算法特训》是应广大考生需求,由蓝桥杯全国软件和信息技术专业人才大赛组委会主办,聘请大赛资深顾问专家团成员之一于航老师,通过“图文+音视频”多媒体形式提供的蓝桥杯真题常见算法课程,同时还有持续至赛前的微信群作业和辅导答疑。本次课程提供回放。

【课程目标】

      课程通过7次课共14课时深入浅出的讲解,帮助学生快速理解和掌握蓝桥杯大赛中常见的算法思维、算法技能和解题思路。同时提供持续至赛前的微信群内作业及辅导答疑,帮助学生提高学习效率、锻炼算法思维。

【课程大纲】

1、暴力破解与实用性优先

  • 暴力破解在大赛及企业应用中的重要性
  • 暴力破解中的实用性原则
  • 逆向解法
  • 枚举法

2、递归原理与构造技巧

  • 递归的重要性
  • 递归与循环的关系
  • 递归的构造技巧
  • 递归出口的考虑
  • 参数设计
  • 间接递归

3、典型问题的递归框架

  • 排列问题
  • 组合计数问题
  • 组合枚举问题
  • 递归设计——条条大路通罗马

4、数学知识的运用

  • 并非数学竞赛
  • 进制问题及其巧妙运用
  • 整数与整除问题
  • 欧几里得扩展定理
  • 有理数表示,大数问题

5、博弈问题的思路

  • 递归搜索的基本框架
  • 当有平局时的考虑
  • 尼姆定理
  • 缓存结果

6、分治法与动态规划

  • 分治思想的重要性
  • 二分法是基础
  • 动态规划问题的求解次序
  • 复杂问题的规划

7、图及其他

  • 图与树的关系和转化
  • 图的基本遍历
  • 利用树的性质
  • 线段树与并查集介绍

于航特训课:第一课

 


【关于讲师】

      于航

      中科院计算所
      曾于浙江大学电机系实验室、浙大网新、神州泰岳、中科院计算所等从事软件开发或软件技术培训工作,曾在嘉兴电力、福建电信、扬州联通、中石油物探、中国气象局卫星中心等大中型项目中担任项目组长或技术主管。
从第一届蓝桥杯大赛开始至今,作为大赛顾问专家团成员之一,为大赛提供软件开发技术方面的顾问支持,对蓝桥杯大赛有着深刻的影响和了解。
于老师授课风格轻松幽默,对复杂技术难题理解透彻,讲解深入浅出、层次清晰,喜欢以创新的方式呈现问题关键所在。


【购买须知】
  1. 该课程为付费系列课程,按课程计划定期更新,每节课程可在开课时直播学习,也可反复回听
  2. 购买课程后,请确认您是否已添加小蓝为微信好友,然后私聊小蓝,小蓝将您邀请进入微信算法特训学习群。每次开始上课之前,小蓝会在群里提醒您准备上课
  3. 该课程为虚拟内容服务,购买成功后概不退款,敬请原谅
  4. 如有其它疑问,可点击左下角“咨询”按钮,与客服沟通后再购买

1. 如果您在报名过程中遇到问题,请点我寻找答案。

2. 如果还不能解决您的问题,请直接问小蓝。


【往期活动】

 

蓝桥杯算法特训第一课【实用性原则】源代码

于航特训课:第一课

【内容简介】
本文章内容为【2018蓝桥杯大赛算法特训(软件)系列课程】第一课【实用性原则】中涉及到的课上例题的代码实现,加入赛前特训获取全部课程内容请联系【小蓝】。


【课程中涉及的源代码】
1. 猜年龄
【问题描述】
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。
他曾在1935~1936年应邀来中国清华大学讲学。
一次,他参加某个重要会议,年轻的脸孔引人注目。
于是有人询问他的年龄,他回答说:
“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。
【源代码】
【JAVA:于航】

1
2
3
4
5
6
7
8
9
10
11
public class A{
    public static void main(String[] args){
        for(int i=1; i<100; i++){
            int a = i * i * i;
            int b = a * i;
            if((a+"").length()!=4continue;
            if((b+"").length()!=6continue;            
            System.out.println(i " = " + a " " + b);
        }
    }
}

【C语言:志愿者】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include
#include 

//判断数组里面每一个元素是否相同,相同返回1,不同返回0
int ifDiffInArr(char* arr,int num)
{
    for (int x 0; x < num-1; x++)
    {
        for (int y = x 1; y < num; y++)
        {
            if (arr[x== arr[y])
            {
                return 1;
            }
        }
    }
    return 0;
}
//判断数组1和数组2里面每一个元素是否相同,相同返回1,不同返回0
int ifDiffOfArr(char* arr1int num1,char*arr2,int num2)
{
    for (int x 0; x < num1; x++)
    {
        for (int y 0; y < num2; y++)
        {
            if (arr1[x== arr2[y])
            {
                return 1;
            }
        }
    }
    return 0;
}

void main()
{
    char arr1[4};//保存立方结果4位数的数组
    char arr2[6};//保存4次方结果6位数的数组
    int a, b;//保存立方和4次方的变量
    for (int i 1; i &lt100; i++)//年龄从1到100
    {
        //立方过程
        a= i * i * i;
        //把整形转变为数组类型char*
        itoa(a, arr110);
        //判断arr1数组里面的数字是否重复,重复的话就舍掉i,继续判断下一个i++
        if (ifDiffInArr(arr14== 1)
        {
            continue;
        }

        //4次方过程
        b = a * i;
        //把整形转变为数组类型char*
        itoa(b, arr210);
        //判断arr2数组里面的数字是否重复,重复的话就舍掉i,继续判断下一个i++
        if (ifDiffInArr(arr26== 1)
        {
            continue;
        }

        //判断数组arr1和arr2里面的数字是否重复,重复的话就舍掉i,继续判断下一个i++;不重复的话就是我们要找的年龄,并打印出来。
        if (ifDiffOfArr(arr1,4,arr2,6)==1)
        {
            continue;
        
        else
        {
            printf("计算结果如下:\n\n");
            printf("数学家维纳的年龄是:%d\n\n", i)