蓝桥杯真题打卡|day18

文章讲述了两个编程问题的解决方案。第一个问题是如何排列字母,通过创建一个基于ASCII码的数组统计字母出现次数,然后按顺序输出。第二个问题涉及计算GCD(最大公约数),利用更相减损术的原理找到使GCD达到最大值的k值。
摘要由CSDN通过智能技术生成

Q1:排列字母

题目:

思路:

创建一个数组用来存放26个大写字母,我们为了方便,使数组的index对应的是大写字母的ASCII,我们数组的长度就为91,‘Z’的ASCii码是90;我们统计每个字母出现的次数,最后按顺序从A开始输出即可

代码:

public class Question1 {
    public static void main(String[] args) {
        String str = "WHERETHEREISAWILLTHEREISAWAY";
        int[] nums = new int[91];
        for (int i = 0; i < str.length(); i++) {
            nums[str.charAt(i)]++;
        }
        for (int i = 65; i <=90 ; i++) {
            for (int j = 1; j <=nums[i] ; j++) {
                System.out.print((char)i);
            }
        }

    }

Q2 :GCD

题目:

思路:

明白一个公式:

具体思路放在代码里

import java.util.Scanner;

public class Question2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long a = sc.nextLong();
        long b = sc.nextLong();
        long c = b - a;
        long k = c - a % c;
        System.out.println(k);
        /**
         * 我们首先要知道更相减损术,gcd(a,b)表示求a,b最大公约数(b>a). gcd(a,b) == gcd(a,b-a);
         * 那么我们可以知道gcd(a+k,b+k) == gcd(a+k,b-a);令 c = b - a ;我们根据题目意思就是:
         * 求gcd(a+k,c)的最大值,那么我们可以仔细想一下,gcd(a+k,c)肯定是要小于等于(a+k)和c的最小值,我们要让
         * Math.min(a+k,c)尽可能的大,c是一个常量,那么a+k必然要比c更大. 那么,gcd(a+k,c)的最大值就是c.
         * 要使gcd(a+k,c)==c ;那么(a+k) % c == 0;我们现在要来求这个k,怎么求这个k呢,我们可以这样想,
         * 因为(a+k) % c == 0,所以 a % c + k % c  == c, k肯定是要小于c的(自己琢磨下)
         * 那么a % c + k   == c   ------>最终: k = c- (a % c);
         */
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值