蓝桥杯模拟省赛(前8题)

题目1

在这里插入图片描述

解决方法:

  1. ((7! ) / 2)
    
  2. 利用全排列思想和set集合去重复
import java.util.HashSet;
import java.util.Set;

public class Main{
    public static Set<String> strArr = new HashSet<>();
    public static void main(String[] args) {
        String str = "LANQIAO";
        char[] chars = str.toCharArray();
        fullSort(chars, 0, chars.length);
        System.out.print(strArr.size());
    }
    public static void fullSort(char[] arr, int start, int end){
        if(start == end-1){
            strArr.add(new String(arr));
        }
        for(int i = start; i < end; i++){
            swap(arr, i, start);
            fullSort(arr, start+1, end);
            swap(arr, i, start);
        }
    }
    public static void swap(char[] arr, int i, int j){
        char tem = arr[i];
        arr[i] = arr[j];
        arr[j] = tem;
    }
}
题目2

在这里插入图片描述
解决方案:全排列和set集合应用去重,通过栈进行判断。

import java.util.HashSet;
import java.util.Set;
import java.util.Stack;

public class Main{
    public static Set<String> strArr = new HashSet<>();
    public static void main(String[] args) {
        String str = "()()()()";
        char[] chars = str.toCharArray();
        fullSort(chars, 0, chars.length-1);
        System.out.print(strArr.size());
    }
    public static boolean judge(char[] arr){
        Stack<Character> stack = new Stack<>();
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == '('){
                stack.push(arr[i]);
            } else if(arr[i] == ')' && !stack.empty()){
                stack.pop();
            } else {
                stack.push(')');
                break;
            }
        }
        if(stack.empty()){
            return true;
        }
        return false;
    }
    public static void fullSort(char[] arr, int start, int end){
        if(start == end){
            if(judge(arr))
                strArr.add(new String(arr));
        }
        for(int i = start; i <= end; i++){
            swap(arr, i, start);
            fullSort(arr, start+1, end);
            swap(arr, i, start);
        }
    }
    public static void swap(char[] arr, int i, int j){
        char tem = arr[i];
        arr[i] = arr[j];
        arr[j] = tem;
    }
}
题目3

在这里插入图片描述

无向连通图最少有n-1条边,故答案为2018

题目4

在这里插入图片描述

1MB = 1024KB
1KB = 1024B
结果:12.5 * 1024 * 1024 = 13107200

题目5

在这里插入图片描述

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

public class test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] k = new int[3];
        int n = scanner.nextInt();
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        int count = 0;
        k[0] = a;
        k[1] = b;
        k[2] = c;
        Arrays.sort(k);
        int min = k[0]-1;
        count += min;
        for(int i = min+1; i <= n; i++){
            if(i % a != 0 && i % b != 0 && i % c != 0){
                count++;
            }
        }
        System.out.println(count);
    }
}
题目6

在这里插入图片描述

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        char[] ch = str.toCharArray();
        List<Character> list = new ArrayList<>();
        for(int i = 0; i < ch.length; i++){
             if((char)(ch[i] + 3) > 'z'){
                 list.add((char)(ch[i] + 2 - 'z' + 'a'));
             } else {
                 list.add((char)(ch[i]+3));
             }
        }
        for (char c: list) {
            System.out.print(c);
        }
    }
}
题目7

在这里插入图片描述

import java.util.Scanner;

public class Main {
    public static int[][] spiralOrder(int n,int m){
        int[][] num = new int[n][m];
        int row=0,col=0;
        num[row][col]=1;
        int upBound=0;
        int rightBound=num[0].length-1;
        int leftBound=0;
        int downBound=num.length-1;
        int temp=1;


        while(true){
            for(int i=leftBound;i<=rightBound;i++)
                num[upBound][i]=temp++;
            if(++upBound>downBound) break;
            for(int i=upBound;i<=downBound;i++)
                num[i][rightBound]=temp++;
            if(--rightBound<leftBound) break;
            for(int i=rightBound;i>=leftBound;--i)
                num[downBound][i]=temp++;
            if(--downBound<upBound) break;
            for(int i=downBound;i>=upBound;--i)
                num[i][leftBound]=temp++;
            if(++leftBound>rightBound) break;
        }
        return num;
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int r = sc.nextInt();
        int c = sc.nextInt();
        int[][] list = new int[n][m];
        list = spiralOrder(n,m);
        System.out.print(list[r-1][c-1]);
    }

}
题目8

在这里插入图片描述

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        int[][] ch =new int[m+2][n+2];
        for (int i =1 ; i <= n ;i++){
            ch[1][i]=n-i+1;
        }
        for(int i=2;i<=m;i++){
            if((i&1)==1){
                for(int j=n;j>=1;j--)
                    ch[i][j]=(ch[i-1][j-1]+ch[i][j+1])%1000;
            }else{
                for(int j=1;j<=n;j++)
                    ch[i][j]=(ch[i-1][j+1]+ch[i][j-1])%1000;
            }
        }
        int result= (m&1)==1? ch[m][1]:ch[m][n];
        System.out.println(result);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值