蓝桥杯16届Java研究生组

第一题:数位倍数

代码:

复制代码
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int count=0;
        for(int i=1;i<=202504;i++){
          int x=count_num(i);
          if(x%5==0){
            count++;
          }
        }
        System.out.println(count);
    }
    public static int count_num(int n){
      int num=0;
      while(n>0){
        num+=n%10;
        n=n/10;
      }
      return num;
    }
}
第三题:变换数组

问题描述

输入一个数组 aa ,包含有 nn 个元素 a1,a2,⋯,ana 1,a 2,⋯,a n 。对这个数组进行 mm 次变换,每次变换会将数组 aa 中的每个元素 aia i 转换为 ai⋅bitCount(ai)a i ⋅bitCount(a i )。其中 bitCount(x)bitCount(x ) 表示数字 xx 的二进制表示中 11 出现的次数,例如 bitCount(3)=2bitCount(3)=2,因为 33 的二进制表示为 1111,其中 11 出现了两次。

请输出变换之后的数组内容。

输入格式

输入的第一行包含一个正整数 nn ,表示数组 aa 中的元素个数。

第二行包含 nn 个整数 a1,a2,⋯,ana 1,a 2,⋯,a n,相邻整数之间使用一个空格分隔。

第三行包含一个整数 mm,表示变换次数。

输出格式

输出一行,包含 nn 个整数,相邻整数之间使用一个空格分隔,表示变换之后得到的数组 aa

样例输入

2

5 7

2

样例输出

20 63

样例说明

5=(101)25=(101)2,7=(111)27=(111)2,第一次变化后 a=10,21a=10,21

10=(1010)210=(1010)2,21=(10101)221=(10101)2,第二次变换后 a=20,63a=20,63

代码:

复制代码
package LQ_16_jie;

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        int m =sc.nextInt();
        for(int i=0;i<m;i++) {
            for (int j = 0; j < n; j++) {
                arr[j] = arr[j] * Integer.bitCount(arr[j]);
            }
        }
        sc.close();

        for(int i=0;i<n;i++) {
            System.out.print(arr[i]+" ");
        }

    }
}

第四题:最大数字

问题描述

我们有 nn 个连续的整数 1,2,3,⋯,n1,2,3,⋯,n,可以自由排列它们的顺序。

然后,我们把这些数字转换成二进制表示,按照排列顺序拼接形成一个新的二进制数。

我们的目标是让这个二进制数的值最大,并输出这个二进制对应的十进制表示。

输入格式

输入一行包含一个正整数 n。

输出格式

输出一行包含一个整数表示答案。

样例输入

3

样例输出

30

代码:

复制代码
package LQ_16_jie;

import java.math.BigInteger;
import java.util.*;

/**
 * 蓝桥杯16届研究生省赛第四题-贪心算法
 */
public class Test4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        solve(n);
    }

    public static void solve(int n){
        List<String> list =  new ArrayList<>();

        //生成二进制字符串列表
        for(int i=1;i<=n;i++){
            list.add(Integer.toBinaryString(i));
        }
        //排序,Lamda表达式
        list.sort((a,b)->(b+a).compareTo(a+b));

        StringBuilder sb = new StringBuilder();
        for(String s : list){
            sb.append(s);
        }

        //转十进制输出
        System.out.println(new BigInteger(sb.toString(),2));

    }
}

第五题:小说

问题描述

小蓝是一位网络小说家。现在他正在撰写一部新的推理小说,这部小说有 nn 个不同的人物。

小说的每一章都有以下三种情节的一种:

  1. A 发现 B 不知道真相。
  2. A 发现 B 知道真相。
  3. A 知道了真相。

为了保证读者的协调和新鲜感,小蓝的小说还要满足以下要求:

  1. "B 发现 A 不知道真相"不能在 "A 知道了真相"后。
  2. "B 发现 A 知道真相"不能在 "A 知道了真相"前。
  3. "B 发现 A 不知道真相"不能在 "B 发现 A 知道真相"后。
  4. 相邻的两章情节类型不同,例如如果第一章是 A 发现 B 不知道真相那么第二章就不能是 C 发现 D 不知道真相。
  5. 完全相同的情节不能出现两次。

现在小蓝希望知道,他最多能写多少章。

输入格式

输入的第一行包含一个正整数 nn,表示小说人数。

输出格式

输出一行包含一个整数表示答案,即小蓝最多能写多少章小说。

样例输入 1

2

样例输出 1

6

样例输入 2

3

样例输出 2

13

样例说明 1

以下是一种可能的情况:

  1. B 发现 A 不知道真相。
  2. A 知道了真相。
  3. B 发现 A 知道真相。
  4. A 发现 B 不知道真相。
  5. B 知道了真相。
  6. A 发现 B 知道真相。

小蓝一共能写 6 章。

评测用例规模与约定

对于 30% 的评测用例,n≤5≤5;

对于所有评测用例,1≤n≤1091≤n≤109。

代码:

复制代码
import java.util.Scanner;

public class Test5 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        long n=scanner.nextInt();
        if(n==1){
            System.out.println(1);
        }
        else{
            System.out.println(2*n*n-3*n+4);
        }
    }
}

第六题:01串

问题描述

给定一个由 0,1,2,3...0,1,2,3... 的二进制表示拼接而成的长度无限的 0101 串。其前若干位形如 011011100101110111...011011100101110111...。

请求出这个串的前 xx 位里有多少个 11。

输入格式

输入的第一行包含一个正整数 xx

输出格式

输出一行包含一个整数表示答案。

样例输入

7

样例输出

5

样例说明

给定的串的前 77 位为 01101110110111。

代码:

复制代码
package LQ_16_jie;

import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();

        long count = 0;
        long pos = 0;
        long num = 0;
        while (pos < n) {
            String binary = Long.toBinaryString(num);
            long len = binary.length();

            for(int i = 0; i < len && pos + i < n; i++) {
                if(binary.charAt(i) == '1') {
                    count++;
                }
            }
            pos += len;
            num++;
        }

        System.out.println(count);
    }
}
相关推荐
绿算技术8 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
晨曦中的暮雨8 小时前
Golang速通(Javaer版)
java·开发语言·后端·golang
七老板的blog9 小时前
当 Spring StateMachine 遇见大模型:构建工业级 AI 写作流水线
java·人工智能·spring
想吃火锅10059 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
云烟成雨TD9 小时前
Spring AI 1.x 系列【46】MCP Security 模块
java·人工智能·spring
CRMEB系统商城9 小时前
CRMEB多商户系统(Java)v2.3公测版发布
java·开发语言·人工智能·小程序·开源·php
sinat_255487819 小时前
第七部分。介绍MVC(模型-视图-控制器)模式
java·ide·http·tomcat·intellij-idea
李白的天不白10 小时前
ps -ef | grep java
java
ab_dg_dp10 小时前
Android 17+ 提取 AIDL 生成 Java 文件的实用脚本
android·java·python