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

蓝桥冲刺31天,第十六天java题解

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

蓝桥冲刺31天,第十六天java题解

目录

一、金币

解析:

代码:

二、优秀的拆分

解析:

代码:

三、穿越雷区

解析:

代码:

四、蓝肽子序列

解析:

代码:


一、金币 原题链接

 

解析:

这题怎么说呢

第一天:1枚金币

第二天,第三天:2,枚金币

第四、五、六天:3枚金币;

那么每一个连续的天数内可以获得总金币数为:i^2;

第一个连续1天,获得1金币;

第二个连续2天,获得4金币;

第三个连续3天,获得9金币;

第n个连续n天,获得n*n金币;

然后你只需要判断每次的剩余天数和n的关系即可

代码如下:

代码:
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n=scan.nextInt();
        long s=0;
        for(int i=1;;i++){
          if(n>=i){
            s+=i*i;
            n-=i;
          }else{
            s+=i*n;
            System.out.println(s);
            return;
          }
        }    
        }
}

二、优秀的拆分

 

原题链接 解析:

这题两种解题方案:

方案一:判断原数是否为偶数,如果为奇数,直接输出-1;

为偶数,将该数变成2进制表达式;存于字符串中,进行每一位是否为1判断;

例如:100—>1100100;长度为7;第一位1位于0号位

所以第一个输出: 2的7-0-1次方,即2的6次方=64;

7:长度;0:所在位置;1:二进制从0次开始计算,减去;

同理;第二个1:2的7-1-1次=32;

第三个1:2的7-4-1次=4;相加=100;

方案二:判断原数是否为偶数,如果为奇数,直接输出-1;

为偶数,每一次判断这个数可以到达的最大的2的幂次数是多少,然后减去对应数,依次到为0;

代码如下:

代码:
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 j=1;
        if(n%2==1){
          System.out.println(-1);
        }else{
          while(n>0){
            if(Math.pow(2,j)<=n&&Math.pow(2,j+1)>n){
              System.out.print((int)Math.pow(2,j)+" ");
              n-=Math.pow(2,j);
              j=1;
            }else{
              j++;
            }
          }
        }
    }
}

三、穿越雷区

 

原题链接 解析:

这题能就是一个普通的bfs进阶问题,把原本的可以向上下左右四个方向移动变成了只能向与当前所在位置不同的值移动,所以,我们在设置的时候,可以把“-”电极设置为-1,“+”电极设置为-2,然后每次走和当前位置值不同我位置即可;代码如下:

(如果看不懂可以随时问,因为我也是bfs新学,在这里讲可能不太清楚)

代码:
import java.util.linkedList;
import java.util.Queue;
import java.util.Scanner;

public class 穿越雷区 {
    static Scanner sc=new Scanner(System.in);
    static int n;
    static int [][]arr;
    static int [][]brr;
    static int sx,sy,ex,ey;
    public static void main(String[] args) throws Exception{
        init();
        bfs();
    }
    static void init() throws Exception{
        n=sc.nextInt();
        arr=new int[n][n];
        brr=new int[n][n];
        for (int j=0;j qx=new linkedList<>();
        Queue qy=new linkedList<>();
        qx.add(sx);//加入队列
        qy.add(sy);
        int xa,ya;
        brr[sx][sy]=0;//初始点
        while (!qx.isEmpty()){
            int x= qx.poll();//出队列
            int y=qy.poll();
            for (int i=-1;i<2;i+=2){
                xa=x+i;
                if (xa==ex&&y==ey){//走到了B点
                    System.out.println(brr[x][y]+1);//最后一次移动的步数
                    return;
                }
                if (xa>=0&&y>=0&&xa=0&&ya>=0&&x 

四、蓝肽子序列

 

原题链接 解析:

这个子序列问题是小怂今天才刚学会的内容,有兴趣可以看看下面的视频讲解,我觉得讲的挺好的,而且还带有其他的动态规划讲解:B站视频

代码:
import java.util.Scanner;

public class 蓝肽子序列 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String sa=sc.next();
        String sb=sc.next();
        String []arr=new String[1000];
        String []brr=new String[1000];
        String a="",b="";
        int k=0,y=0;
        for (int i=0;i='A'&&sa.charAt(i+1)<='Z'){
                arr[k]=a;
                a="";
                k++;
            }
        }
        for (int i=0;i='A'&&sb.charAt(i+1)<='Z'){
                brr[y]=b;
                b="";
                y++;
            }
        }
        int [][]dp=new int[y+1][k+1];
        for (int i=1;i 

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

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

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