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

蓝桥冲刺31天,第八天Java题解(神奇算式+缩位求和+积木大赛)

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

蓝桥冲刺31天,第八天Java题解(神奇算式+缩位求和+积木大赛)

目录

一、神奇算式   精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课

1.讲解

2.代码

二、缩位求和    精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课

1.讲解

2.代码

三、积木大赛    https://www.lanqiao.cn/problems/384/learning/

1.讲解

方案一:

方案二:

2.代码

方案一:

方案二:


一、神奇算式

1.讲解

 这题呢,可以暴搜,两数相乘,我们只要让前面的数字比后面的数字小,那么就不会出现重复项,同时满足相乘大于1000且小于10000,并且每个数字不重复,且结果使用数字和计算数字相同;当然,也可以分类讨论,第一种是一位数*三位数,第二种是2位数*2位数,第二种写法累一些。

2.代码

用的是第二种方法:

public class 神奇算式 {
    public static void main(String[] args) {
        int [][][]brr=new int[99][1000][10];
        int s=0,y;
        for (int i=2;i<99;i++){
            if (i<10){
                for (int j=999;j>=1000/i;j--){
                    y=i*j;
                    if (y<1000||y>=10000){
                        break;
                    }
                    brr[i][j][i]++;
                    brr[i][j][j % 10]++;
                    brr[i][j][(j / 10) % 10]++;
                    brr[i][j][(j / 100)]++;
                    if (brr[i][j][i] != 2 && brr[i][j][j % 10] != 2 &&  brr[i][j][(j / 10) % 10] != 2) {
                        s = getS(brr, s, y, i, j);
                    }
                }
            }else{
                for (int j=99;j>=1000/i&&j>i;j--){
                    y=i*j;
                    if (y<1000||y>=10000){
                        break;
                    }
                    brr[i][j][i % 10]++;
                    brr[i][j][j % 10]++;
                    brr[i][j][j / 10]++;
                    brr[i][j][(i / 10)]++;
                    if (brr[i][j][i % 10] != 2 && brr[i][j][j % 10] != 2 && brr[i][j][j / 10] != 2) {
                        s = getS(brr, s, y, i, j);
                    }
                }
                }
            }
        System.out.println(s);
        }
    private static int getS(int[][][] brr, int s, int y, int i, int j) {
        while (y > 0) {
            brr[i][j][y % 10]--;
            y /= 10;
        }
        for (int z = 0; z < 10; z++) {
            if (brr[i][j][z] != 0) {
                break;
            } else if (z == 9) {
                s++;
            }
        }
        return s;
    }
}

二、缩位求和 1.讲解

 这题的注重点是你第一次输入后,求出初始值后直接可以用int表示;

将所有数相加后,用while计算和是否小于10即可;

2.代码

代码如下:

Scanner sc = new Scanner(System.in);
        String st=sc.next();
        int m=st.length();//长度
        int s=0;//存放第一次求和后的值
        for (int i=0;i 

三、积木大赛

 

1.讲解

方案一:

寻找连续上升段和连续下降的段,然后求其中的解

比如:3  5  8  4  1  6  9  2  5

那么连续段的最小最大:3   8   1   9  2  5

然后  从第一个开始,判断后面的值是否比该值小,比该值小就替换

所以  开始进行3此操作,得到的结果是  0   5  0  8  1  4

然后 进行5 此  0  0   0  8  1  4

进行8次   0   0   0   0  0   3

最后进行3次,完成结果

3+5+8+3=19次

当然,这个方案是适用找不到更加方便的解的时候使用的;

方案二:

每一个后面的值比前面一个值大是,增加相应的操作次数  还是上面的例子:

比如:3  5  8  4  1  6  9  2  5

那么我们设置数组时,前置一个0则为

arr=0  3  5  8  4  1  6  9  2  5;

从arr1开始,每一个数都是和前面一个数比较

3>0,所以增加3-0次

5>3,增加5-3次

8>5,增加8-5次

4<8,1<4,这俩不变

6>1,增加6-1次

9>6增加9-6次

2<9不变

5>2,增加5-2次

总次数:3+2+3+5+3+3=19次

2.代码

方案一:
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 count=1;
        long sum=0;
        arr[0]=sc.nextInt();
        brr[0]=arr[0];
        if (n==1){
            System.out.println(arr[0]);
            return;
        }else if (n==2){
            arr[1]=sc.nextInt();
            System.out.println(Math.max(arr[0],arr[1]));
            return;
        }
        arr[1]=sc.nextInt();
        int y=1;
        for (int i=2;iarr[i-1]&&arr[i-1]
方案二:
import java.io.*;
public class 积木大赛 {
    static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer st=new StreamTokenizer(br);
    public static void main(String[] args) throws Exception{
        int n=nextInt();
        int []arr=new int[n+1];
        for (int i=1;i<=n;i++){
            arr[i]=nextInt();
        }
        int a=arr[0];
        for (int i=1;i<=n;i++){
            if (arr[i]>arr[i-1])
                a+=(arr[i]-arr[i-1]);
        }
        System.out.println(a);
    }
    public static int nextInt() throws Exception {
        st.nextToken();
        return (int) st.nval;
    }
}

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

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

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