【十三届蓝桥杯省赛解析javaC组】

本文介绍了多个编程竞赛的题目及其解题思路,涵盖了字母排序、特殊时间计算、纸张尺寸计算、序列求和、矩形拼接、选数异或、最大公约数、青蛙过河和因数平方和等问题。通过实例解析,展示了如何运用不同算法解决问题,并提供了Java代码示例。

A. 字母排序

题目描述

在这里插入图片描述

解题思路

A题相对比较简单,这题有两种解法
第一种是可以利用记事本把文本复制,然后自己手动排序
第二种是写代码:具体思路是定义一个字符串用来储存问文本,然后把文本转成字符型数组,利用Arrays.sort对字符型数组进行排序,最终实现字符的排序

代码示例

import java.util.Arrays;
import java.util.Scanner;

public class A {
   
   
    static String str;
    static char[] chars;

    public static void main(String[] args) {
   
   
        Scanner scan = new Scanner(System.in);
        str = scan.next();
        chars = new char[str.length()];
        trans();
        Arrays.sort(chars);
        print();
    }

    private static void trans() {
   
   
        for (int i = 0; i < str.length(); i++) {
   
   
            chars[i]=str.charAt(i);
        }
    }
    private static void print(){
   
   
        for (char a:chars) {
   
   
            System.out.print(a);
        }
    }
}

B. 特殊时间

题目描述

2022年2月22日22:2022:20 是一个很有意义的时间, 年份为2022,由3个2和1个0
组成, 如果将月和日写成4位, 为0222,也是由3个2和1个0组成, 如果将时间中的
时和分写成4位, 还是由 3个2 和1个0组成。

小蓝对这样的时间很感兴趣, 他还找到了其它类似的例子, 比如111年10月11日
01:11,220201:11,2202 年2月22日22:0222:02等等。

请问, 总共有多少个时间是这种年份写成4位月日写成4 位时间写成4位后由3个
一种数字和 1 个另一种数字组成。注意1111年11月11日11: 1111:11不算,因为
它里面没有两种数字

解题思路

因为时间里面只有两个不同的数字,我们可以通过对两个数字的遍历去组成不同的四位数,然后通过check_month和check_time函数去判别组成的四位数是否合格(是否符合时间或者是日期的标准)最后累加在一起就可以求出最终的结果

代码示例

public class B {
   
   
    static  int[] day_month ={
   
   0,31,28,31,30,31,30,31,31,30,31,30,31};
    /**检查年月日是否合法*/
    public static int check_month(int D){
   
   
        int M = D/100;//取得月份
        int day = D%100;//取得天数
        if(M<1||M>12)return 0;
        if (day<=1||day>day_month[M])return 0;
        return 1;
    }
    /**判断时间是否合法*/
    public static int check_time(int m){
   
   
        int H = m/100;//取得小时
        int M = m%100;//取得分钟数
        if (H<0||H>23) return 0;
        if (M<0||M>59) return 0;
        return 1;
    }
    public static void main(String[] args) {
   
   
        int count=0;//记录匹配个数
        /**因为时间里只包含两个数字,所以我们这里只开两重循环*/
        for (int a = 0; a <= 9; a++)
            for (int b = 0; b <= 9; b++)
                if(a!=b){
   
   
                int year =4;//两个数字可以匹配到的年份有四种
                int month=0;//与之匹配的月份我们要去做检查月份天数是否成立,所以放在下面赋值
                int time=0;//同上月份一样要放在上边进行与之匹配
                int[] A = new int[]{
   
   a,a,a,a};
                //枚举四种情况即aaab,aaba,abaa,baaa;
                for (int i = 0; i < 4; i++) {
   
   
                    A[i]=b;
                    int num = 0;//用来拼接与之对应的情况的数字
                    for (int j = 0; j < 4; j++) {
   
   
                        num = num * 10 + A[j];
                    }
                    month += check_month(num);
                    time += check_time(num);//与之匹配的时间可能会多,每匹配一次就去加1
                    A[i]=a;
                }
                count+=year*month*time;//每调整一次数字位置就计算一次
            }
        System.out.println(count);
    }
}

C. 纸张尺寸

题目描述

在 ISO国际标准中定义了A0 纸张的大小为1189mm×841mm, 将A0纸沿长边对折后
为A1纸, 大小为841mm× 594mm, 在对折的过程中长度直接取下整 (实际裁剪时可
能有损耗)。将 A1 纸沿长边对折后为A2 纸, 依此类推。
输入纸张的名称, 请输出纸张的大小。

输入格式

输入一行包含一个字符串表示纸张的名称, 该名称一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。

输出格式

输出两行,每行包含一个整数,依次表示长边和短边的长度。

输入样例

A0

输出样例

1189
841

解题思路

按照题目详情我们可以知道,要根据输入的纸张型号去输出相对的纸张大小,题目有两种思路:
其一:自己计算出每种纸张的大小,然后通过字符比对去输出相对型号的相对大小(若是自己写不出代码的话建议放弃)
其二:用Integer的pareseInt函数把输入的第二个字符转化成数字,然后通过for循环去计算出与之对应的纸张大小,然后输出
可以把我最后的if else删掉,放在那里只是为了严谨一些

代码示例

import java.util.Scanner;

public class C {
   
   
    static int Long=1189;
    static int wide=841;
    static String size;//用来获取纸张型号
    static int sizeID;

    public static void main(String[] args) {
   
   
        Scanner scan = new Scanner(System.in);
        size= scan.next();
        sizeID=Integer.parseInt(String.valueOf(size.charAt(1)));
        for (int i = 0; i < sizeID; i++) {
   
   
            if (Long > wide) {
   
   
                Long/=2;
            }else{
   
   
                wide/=2;
            }
        }
        if (Long > wide) {
   
   
            System.out.println
### 关于第七届蓝桥杯 Java 的真题及解答 以下是关于第七届蓝桥杯 Java 相关的内容解析以及可能涉及的题目类型解法。 #### 一、背景介绍 蓝桥杯是一项面向全国高校学生的科技竞活动,旨在推动软件开发技术的发展。其中,Java 是参者常用的语言之一。对于第七届蓝桥杯 Java 类别的题目,通常会覆盖算法基础、数据结构应用等内容[^1]。 --- #### 二、典型题目分析与代码实现 ##### 题目示例:大数运算 在某些年份的比中,可能会考察 `BigInteger` 或其他高级类库的应用。例如: **问题描述** 计算 \( (20^{22} \mod 7) + 6 \),并输出结果。 **解决方案** 此问题可以通过 Java 中的大整数类 `BigInteger` 来解决。具体代码如下所示: ```java import java.math.BigInteger; public class Main { public static void main(String[] args) { BigInteger base = new BigInteger("20"); BigInteger exponent = BigInteger.valueOf(22); BigInteger modulus = BigInteger.valueOf(7); // 计算幂次取模的结果 BigInteger resultMod = base.modPow(exponent, modulus); // 加上常数值6 BigInteger finalResult = resultMod.add(BigInteger.valueOf(6)); System.out.println(finalResult); } } ``` 上述代码实现了指数运算后的取模操作,并最终加上固定值 6 输出结果[^2]。 --- ##### 另一类常见题目:字符串处理 这类题目主要测试选手对字符串的操作能力,比如统计字符频率或者判断回文串等。 **问题描述** 给定一个字符串,求其是否为回文串(正读反读相同)。如果是,则返回 true;否则返回 false。 **解决方案** ```java public class PalindromeChecker { public static boolean isPalindrome(String s) { int left = 0; int right = s.length() - 1; while (left < right) { if (s.charAt(left) != s.charAt(right)) { return false; } left++; right--; } return true; } public static void main(String[] args) { String testString = "level"; System.out.println(isPalindrome(testString)); } } ``` 该程序通过双指针方法逐一比较首尾字符来验证输入字符串是否满足条件。 --- #### 三、总结说明 以上仅列举了部分类型的经典习题及其对应的编程技巧。实际比中的难度等级较高,建议多加练习历年真题集锦以提升实战水平。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值