②【Java 组】蓝桥杯省赛真题解析 [振兴中华] [三部排序] 持续更新中...

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: ②【Java 组】蓝桥杯省赛真题解析 [振兴中华] [三部排序] 持续更新中...


一、振兴中华


题目描述

文字版:

小明参加了学校的趣味运动会,其中的一个项目是:跳格子。

地上画着一些格子,每个格子里写一个字,如下所示:

从 我 做 起 振

我 做 起 振 兴

做 起 振 兴 中

起 振 兴 中 华

比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。

要求跳过的路线刚好构成“从我做起振兴中华”这句话。

请你帮助小明算一算他一共有多少种可能的跳跃路线呢?


解题思路

借助递归的思想解题,

第一次跳格子选择只有两种情况:

①向右跳

②向下跳

之后的每一个格子也都是只有上述两种选择,我们设定一个函数,函数中的两个参数代表跳格子的方向,以参数对应的坐标(0,0)作为开始位置,通过递归来遍历所有跳格子的选择,当x轴下标到4,或Y轴下标到3时,就可以认定为一条路线,并返回1,作为累加的次数。


解题代码:

public class 振兴中华 {
  public static void main(String[] args) {
    int answer = dfs(0,0);
    System.out.print(answer);
  }
  public static int dfs(int x,int y) {
    if(x == 4 || y == 3) return 1; //当x轴下标到4,或Y轴下标到3时,就可以认定为一条路线
    return dfs(x+1,y) + dfs(x,y+1);//递归,开始向右跳得到的路线 + 看是向左跳得到的路线,从而获取的所有路线
  }
}





二、三部排序(代码填空题)


题目描述

文字版:

一般的排序有许多经典算法,如快速排序、希尔排序等。

但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。

比如,对一个整型数组中的数字进行分类排序:

使得负数都靠左端,正数都靠右端,0 在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过 1 次线性扫描就结束战斗!!

以下的程序实现了该目标。

其中 x 指向待排序的整型数组,len 是数组的长度。

请分析代码逻辑,并推测划线处的代码。

源代码(java)

import java.util.*;
public class Main
{
    static void sort(int[] x)
    {
        int p = 0;
        int left = 0;
        int right = x.length-1;
        while(p<=right){
            if(x[p]<0){
                int t = x[left];
                x[left] = x[p];
                x[p] = t;
                left++;
                p++;
            }
            else if(x[p]>0){
                int t = x[right];
                x[right] = x[p];
                x[p] = t;
                right--;
                //p++;                
            }
            else{
                ______________;
            }
        }
        show(x);
    }
    static void show(int[] x)
    {
        for(int i=0; i<x.length; i++)
        {
            System.out.print(x[i] + ",");
        }
        System.out.println();
    }
    public static void main(String[] args)
    {
        //int[] x = {25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0};
        sort(new int[]{-1,0,1,-2,0,2,-3,0,0,3,-4,-5,4,-6,0,5,6});
        sort(new int[]{-1,0,-1,-2,0,-2,-3,0,0,-3,-4,-5,-4,-6,0,-5,-6});
        sort(new int[]{1,0,1,2,0,2,3,0,0,3,4,5,4,6,0,5,6});
    }
}


解题思路

代码中的这一段,是将 < 0 的数放到左边,然后 lp 都加一 :

while(p<=right){
            if(x[p]<0){         //若数小于0
            //将最左边数与当前数调换位置
                int t = x[left];
                x[left] = x[p]; 
                x[p] = t;
                //左边界后移一位
                left++;
                //p位置也后移一位
                p++;
            }


紧接着就是将 >0 的数,与右边界上的数调换位置(调换后p位置不用动,右边界向前移动一位)

else if(x[p]>0){
                int t = x[right];
                x[right] = x[p];
                x[p] = t;
                right--;
                //p++;                
            }


那么画线位置,自然就是当p位置的数 =0 时,需要做操作。 这时候p位置的数既不大于零也不小于零,所以左右边界不用动,只需要p向后挪动一位,继续下一次的判断即可。


解题代码:

p++;





目录
相关文章
|
4天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
2天前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
24天前
|
存储 算法 Java
Java内存管理深度解析####
本文深入探讨了Java虚拟机(JVM)中的内存分配与垃圾回收机制,揭示了其高效管理内存的奥秘。文章首先概述了JVM内存模型,随后详细阐述了堆、栈、方法区等关键区域的作用及管理策略。在垃圾回收部分,重点介绍了标记-清除、复制算法、标记-整理等多种回收算法的工作原理及其适用场景,并通过实际案例分析了不同GC策略对应用性能的影响。对于开发者而言,理解这些原理有助于编写出更加高效、稳定的Java应用程序。 ####
|
24天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
26天前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
4月前
|
搜索推荐 算法 Java
|
4月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
6月前
|
存储 搜索推荐 算法
十大排序算法(java实现)(二)
十大排序算法(java实现)(二)
|
6月前
|
搜索推荐 算法 Java
十大排序算法(java实现)(一)
十大排序算法(java实现)(一)
|
7月前
|
搜索推荐 算法 Java
排序算法及java实现
排序算法及java实现
43 0

推荐镜像

更多