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

蓝桥冲刺31天,第六天java打卡

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

蓝桥冲刺31天,第六天java打卡

目录

一.巧排扑克牌 精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课

二.质数拆分  精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课

三.日志统计  精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课

四.递增三元组   “蓝桥杯”练习系统

五.外卖店优先级  精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课


一.巧排扑克牌

先看题:

这题的话,可以手推,但是会累人,然后第一次的6张牌其实很明显在2/4/6/8/10/12的位置,所以手推也只需要判断剩余7张牌的位置

但是身为一个准备蓝桥杯的人,怎么能不写个代码出来呢?

每一次,都把最下面一张放到最上面,总共13张牌,那么每2次拿出1张,最多26次就可以拿完,

那么我们可以定一个数组,然后给1-13位分别赋值为1-13,然后最后输出每一次取出的牌的位置,再把对应位置对上,即可

代码如下:

public class 巧排扑克牌 {
    public static void main(String[] args) {
        int []arr=new int[100];
        for (int i=1;i<=13;i++){
            arr[i]=i;
        }
        int []brr=new int[13];
        int k=0,m=14;
        for (int i=1;k<13;i++){
            if(i%2==1){
               arr[m]=arr[i];
               m++;
            }else{
                brr[k]=arr[i];
                k++;
            }
        }
        String []s= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        String []ss=new String[13];
        for (int i=0;i<13;i++){
            for (int j=0;j<13;j++){
                if (brr[j]==i+1){
                    ss[i]=s[j];
                }
            }
        }
        for (int i=0;i<13;i++){
            System.out.print(ss[i]);
            if (i<12)
                System.out.print(", ");
        }

    }
}
 ps:输出的时候要一个英文 ","再加一个空格

二.质数拆分4

看题:

这题我一开始以为是两个质数相加为2019,可是后来才知道,不是那么简单

简单点说就是:把2019拆分成2个及以上 的不同质数,有多少种拆分方法?

这其实就相当于一个01背包问题,先把比2019小的所有质数求出,然后当成01背包进行运算 

代码如下:

public class 质数拆分 {
    public static void main(String[] args) {
        int s=2;
        int []arr=new int[2020];
        long []brr=new long[2020];
        arr[0]=2;arr[1]=3;
        for (int i=4;i<2020;i++){
            for (int j=2;j<=Math.sqrt(i);j++){
                if (i%j==0)
                    break;
                else if (j+1>Math.sqrt(i)){
                    arr[s]=i;
                    s++;
                }
            }
        }//求出质数数组
        brr[0]=1;
        for (int i=0;i=arr[i];j--){//每一次取一个质数,来判断带上这个质数后,和前面的质数能合成哪些数字
                //有点累死砝码称重,只不过一个是求合成某个数的方案,一个数求可以合成多少不同的数
                brr[j]+=brr[j-arr[i]];
            }
        }
    }
}

 

三.日志统计

看题看题:

 怎么说呢,自己也写了一下午........

解析:有n条日志,我们可以按照主键ID,次键ts排序

然后一次循环,判断每一个id是不是热文

在循环的时候,注意保持第一个时间点和超过这个时间区间后第一个时间点的更换,以及当下一个编号和当前编号不同时的更改

代码如下:

import java.util.Arrays;
import java.util.Scanner;
public class 日志统计 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();//数据个数n
        int d = sc.nextInt();//时间间隔d
        int k = sc.nextInt();//达标个数k
        int[][] arr = new int[n][2];
        int maxs = 0;
        for (int i = 0; i < n; i++) {
            arr[i][0] = sc.nextInt();
            arr[i][1] = sc.nextInt();
        }
        Arrays.sort(arr,((a,b)->{
            if (a[1]!=b[1]){
                return a[1]-b[1];
            }
            return  a[0]-b[0];
        }));
        maxs=arr[n-1][1];
        int t=0,s=-1,y=0,sum=0;
        int []brr=new int[maxs+1];//记录热点编号
        for (int i=0;i=t+d) {//超过区间
                sum++;//要算上当前点赞
                while (arr[i][0]>=t+d) {//查找下一个不超过区间的位置
                    t = arr[y][0];
                    y++;
                    sum = Math.max(sum-1,1);//以防sum<1;
                }
            }else{
                sum++;
                if (sum==k){//热点
                    brr[s]=1;
                }
            }
        }
        for (int i=0;i 

四.递增三元组

看题吧:

解析:

三个数组,直接三个数组进行排序,两轮循环,第一轮循环判断第二个数组比第一个数组的每一个数多的个数,第二轮循环判断第三个数组比第二个数组的每一个数多的个数,然后计算一下第二个数组每一个数的使用次数,和对应的第三个数组对应的大于该数的数相乘求和即可

代码如下:

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

public class 递增三元组 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int []arr=new int[n];
        int []brr=new int[n];
        int []crr=new int[n];
        int []drr=new int[n];//brr比arr大的个数
        int []err=new int[n];//crr比brr大的个数
        int []frr=new int[n+1];
        for (int i=0;iarr[i]){
                    k=j;
                    drr[i]=n-j;
                    break;
                }
            }
            for (int j=y;jbrr[i]){
                    y=j;
                    err[i]=n-j;
                    break;
                }
            }
        }
        for (int i=0;i 

五.外卖店优先级 

未解,等!!!

这题还没解出来,两个测试

一个前五个对,50分

一个后三个对,30分

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

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

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