栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021年蓝桥杯java B组第一场题目+部分解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021年蓝桥杯java B组第一场题目+部分解析

A:ASC  

public static void main(String[] args) {

System.out.println('L'+0);

}

B:卡片

自己解析:

-----------------------------------------------------------------------------

public static void main(String[] args) {
	int arr[]=new int[2021];
	int m=0;
list: for(int i=1;i<30000;i++) {
	int n=i;
	while(n>0) {
		arr[n%10]++;
		if(arr[n%10]==2022) {
			m=i-1;
			break list;
		}
		n/=10;
	}
}System.out.println(m);
	
	
}

C:直线(数学)


D:货物摆放(dfs)

 static List div = new ArrayList<>();

       static int ans = 0;

       static long num = 2021041820210418L;

        static long[] dfs=new long[100];

       public static void main(String[] args) {

           long end = (long)Math.sqrt(num);

           for (long i = 1; i <= end; i++) {

            //去重`.`

               if (num % i == 0&&!div.contains(num/i)&&!div.contains(i)) {

                   div.add(num / i);

                   div.add(i);

                   }

              }   

       dfs(0);

           System.out.println(ans);

       }

       public static void dfs(int n) {

        if(n==3) {

        if(dfs[0]*dfs[1]*dfs[2]==num) {

        ans++;

                 }

        return;

               }

        for(int i=0;i

---------------------------------------------------------------------
static int ans=0;

static long num=2021041820210418L;



public static void main(String[] args) {

long end=(long)Math.sqrt(num);

Setdiv=new HashSet<>();

for(long i=1;i<=end;i++)

{

if(num%i==0) {

div.add(num/i);

div.add(i);



}

}

Long [] arr=div.toArray(new Long[0]);

for(long i:arr) {

for(long j:arr) {

for(long k:arr) {

if(i*j*k==num) {

ans++;

}

}

}

}

System.out.println(ans);

}}


E:路径(DP)

Dijkstra

static class Edge {

        int to, length;

        Edge(int _to, int _length) {

            to = _to;

            length = _length;

        }

    }

    static List[] graph;

    static final int INF = 0x3f3f3f3f;



    private static int dijkstra(int st, int ed) {

        // 新建小根堆

        PriorityQueue pq = new PriorityQueue<>((a, b) ->

                                                     Integer.compare(a.length, b.length));

        boolean[] vis = new boolean[2050];

        int[] dist = new int[2050];

        Arrays.fill(dist, INF);



        dist[st] = 0;

        // to 为点的编号,length 为当前路径长度

        pq.offer(new Edge(st, dist[st]));



        while (!pq.isEmpty()) {

            int from = pq.poll().to;

            if (vis[from]) {

                continue;

            }

            vis[from] = true;

            // 松弛操作

            for (Edge next : graph[from]) {

                int to = next.to, len = next.length;

                if (dist[to] > dist[from] + len) {

                    dist[to] = dist[from] + len;

                    pq.offer(new Edge(to, dist[to]));

                }

            }

        }



        return dist[ed];

    }



    private static int gcd(int a, int b) {

        return b == 0 ? a : gcd(b, a % b);

    }



    public static void main(String[] args) {

        graph = new List[2050];



        // 构建邻接表

        for (int i = 1; i <= 2021; i++) {

            int st = Math.max(i - 21, 1);

            for (int j = st; j <= i; j++) {

                int div = gcd(j, i);

                int lcm = i * j / div;

                if (graph[i] == null) {

                    graph[i] = new ArrayList<>();

                }

                if (graph[j] == null) {

                    graph[j] = new ArrayList<>();

                }

                graph[i].add(new Edge(j, lcm));

                graph[j].add(new Edge(i, lcm));

            }

        }



        System.out.println(dijkstra(1, 2021)); // 10266837

    }

F:时间显示(时间)

 

-------------------------------------------------------------------------------------------------

Scanner s=new Scanner(System.in);

long ss=s.nextLong();



Date date=null;

SimpleDateFormat df=new  SimpleDateFormat("HH:mm:ss");

Calendar calendar=Calendar.getInstance();

calendar.set(0, 0, 0, 0, 0, 0);

calendar.add(Calendar.SECOND, (int) (ss/1000));

 date=  calendar.getTime();

System.out.println(df.format(date));

}

-------------------------------------------------------------------------------------------

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

Date date=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");

long time=sc.nextLong();

long n=8*60*60*1000;

date.setTime(time-n);

String s=   sdf.format(date);

System.out.println(s);

}

G:最少砝码(三进制)

-------------------------------------------------------------------

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

int n=sc.nextInt();



int weight = 1;

int count = 1;

int total = 1;

while (total < n) {

count++;

weight *= 3;

total += weight;

}

System.out.println(count);



}

-------------------------------------------------------------

H:杨辉三角形

---------------------------------------------------------------------------------------------------------------

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

int n=sc.nextInt();



int weight = 1;

int count = 1;

int total = 1;

while (total < n) {

count++;

weight *= 3;

total += weight;

}

System.out.println(count);



}

---------------------------------------------------------------------------------------------------------------

static int N;



public static void main(String[] args) {

   

  

    

        N = new Scanner(System.in).nextInt();

        if (N == 1) System.out.println(1);

        else {

            long ans = (N + 1L) * N / 2 + 2;

            for (int m = 2; m < 16; m++) {

                int start = m * 2, end = N;

                while (start <= end) {

                    int mid = start + end >> 1;

                    if (C(mid, m) == N) {

                        ans = min(ans, (mid + 1L) * mid / 2 + m + 1);

                        break;

                    } if (C(mid, m) > N) end = mid - 1;

                    else start = mid + 1;

                }

            }

            System.out.println(ans);

        }

    }



    static long min(long a, long b) { return a < b ? a : b; }



    static long C(int n, int m) {

        long num = 1;

        for (int nm = 1; nm <= m; n--, nm++)

            if ((num = num * n / nm) > N) return num;

        return num;

    }

I:双向排序

------------------------------------------------------------------------------------

    static int N = 100010;

    static pair[] stk = new pair[N];

    static int[] ans = new int[N];



    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();

        int m = scanner.nextInt();

        int top = 0;

        int p, q;

        for (int i = 0; i < m; i++) {

            p = scanner.nextInt();

            q = scanner.nextInt();

            if (p == 0) {

               
                while (top != 0 && stk[top].x == 0)

                    q = Math.max(q, stk[top--].y);

          

                while (top >= 2 && stk[top - 1].y <= q)

                    top -= 2;

                

                stk[++top] = new pair(0, q);

            } else if (top != 0) {

            

                while (top != 0 && stk[top].x == 1)

                    q = Math.min(q, stk[top--].y);

                

                while (top >= 2 && stk[top - 1].y >= q)

                    top -= 2;

               

                stk[++top] = new pair(1, q);

            }

        }

      

        int k = n, l = 1, r = n;

        

        for (int i = 1; i <= top; i++) {

            if (stk[i].x == 0) {

              

                while (r > stk[i].y && l <= r) ans[r--] = k--;

            } else {

                

                while (l < stk[i].y && l <= r) ans[l++] = k--;

            }

            if (l > r) break;

        }

        

        if (top % 2 == 1) {

            while (l <= r) ans[l++] = k--;

        } else {

            while (l <= r) ans[r--] = k--;

        }

        for (int i = 1; i <= n; i++) {

            System.out.printf("%d ", ans[i]);

        }

    }



    static class pair {

        int x, y;



        pair(int x, int y) {

            this.x = x;

            this.y = y;

        }

    }

J:括号序列

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/778496.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号