2023/3/4双指针

T1、合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        //定义一个新数组存储nums1中的数据
        int[] nums = new int[m];
        for(int i = 0; i < m; i++){
            nums[i] = nums1[i];
        }
        //定义指针,p指向数组nums1、p1->nums、p2->nums2 
        int p = 0;
        int p1 = 0;
        int p2 = 0;
        //比较nums和nums2中的值,将较小的数先存储在nums1中,三目运算符
        while((p1 < m)&&(p2 < n)){
            nums1[p++] = (nums[p1] < nums2[p2])?nums[p1++]:nums2[p2++];
        }
        if(p1 < m){
            for(int i = p1; i < nums.length; i++){
                nums1[p++] = nums[i];
            }
        }
        if(p2 < n){
            for(int i = p2; i < nums2.length; i++){
                nums1[p++] = nums2[i];
            }
        }
    }
}

蓝桥杯真题

T1、数列求值

给定数列 1,1,1,3,5,9,17,⋯从第 4 项开始,每项都是前 3 项的和。求第 20190324 项的最后 4 位数字。

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        // int n = scan.nextInt();
        int a = 1, b = 1, c = 1, d = 0;
        for(int i = 4; i <= 20190324; i ++){
          d = (a + b + c) % 10000;
          a = b;
          b = c;
          c = d;
        }
        System.out.println(d);
        scan.close();
    }
}

T2、质数

我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算第 2019 个质数是多少?

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        //声明一个标记用于存储求得质数的位数
        int zs = 0;
        //声明一个用来循环的变量初始值
        int a =1;  
        //while 循环条件为位数到达2019停止;
        while(zs < 2019) {
          //递增变量
          a++;
          int i;
          //质数从2开始,循环2-a之间的数
          for (i = 2; i <a; i++) {
            //判断有没有数能被a整除如果有跳出循环
            if(a % i == 0) {
              break;
            }
          }
          //如果上一步没有跳出循环则i等于a
          if(i==a) {
            //位数增加
            zs++;
          }
        }
        System.out.println(a);
        scan.close();
    }
}

T3、饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料,凭 3 个瓶盖可以再换一瓶 C 型饮料,并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        for(int i = 3; i <= n; i += 3){
          n++;
        }
        System.out.println(n);
        scan.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值