java刷题-技能树蓝桥基础7-9

原题链接:(13条消息) 星系炸弹-蓝桥杯-基础-CSDN算法技能树

星系炸弹

题目

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。

每个炸弹都可以设定多少天之后爆炸。

比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。

有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

问题分析

题意就是计算 给定日期1000天后对应的日历时间

  1. 考虑平年闰年情况

  1. 考虑包含多少闰年

可以使用数组方法计算,不过有点麻烦,但也是锻炼算法能力的过曾

可以使用data类Calendar进行快速日期计算

代码实现

data、Calendar日期函数方法

package 刷题;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class 星系炸弹 {

    public static void main(String[] args){
        // TODO Auto-generated method stub
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, 2014);
        c.set(Calendar.MONTH,10);
        c.set(Calendar.DAY_OF_MONTH,9);
        c.add(Calendar.DAY_OF_YEAR,1000);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = c.getTime();;
        System.out.println(simpleDateFormat.format(date));//2017-08-05


    }

}

输出结果如下

数组计算方法

理解了原本代码,其实补全和仿照写for循环很简单,这里是详细解读

下面是while循环的写法

public static void main(String[] args){
        // TODO Auto-generated method stub
        int year = 2014;
        int month = 11;
        int day = 9;
        int addday = 1000;
        int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        while(addday>365) {
            year++;
            if(year%4!=0) addday -= 365;
            else addday -= 366;
        } 
        while(addday>=days[month]){
            addday -= days[month];
            month++;
            if(month>12) {
                month -= 12;
                year++;
            }       
        }
        day += addday;
        if(day>=days[month]) {
            day -= days[month];
            month++;
        }
        if(month>12) {
            month -= 12;
            year++;
        }
        System.out.println(year+"-"+month+"-"+day);



    }

输出结果如图

特殊数的和

题目

题目描述

小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。

请问,在 1 到 n 中,所有这样的数的和是多少?

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示满足条件的数的和。

数据范围

1≤n≤10000

输入样例:

40

输出样例:

574

问题分析

实现该问题重点在于判断出哪个数包含特定数字,然后再进行累加就可以

  1. 可以使用字符串函数contains()包含函数检测

  1. 可以使用遍历方法

代码实现

package 刷题;

import java.util.Scanner;

public class 特别数字的和 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc  = new Scanner(System.in);
        int n=sc.nextInt();
        int sum = 0;2
        for (int i=1;i<=n;i++){
            String s = Integer.toString(i);
            if (s.contains("2")||s.contains("0")||s.contains("1")||s.contains("9")){
                sum+=i;
            }
        }
        System.out.println(sum);

    }

}

输入样例输入,得到正确结果

蛇形填数

题目

如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。

容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?

提示:

右上走

问题分析

1当到达边界时,判断它应该向右走还是向下走,向右走完就直接向左下走,向下走完就直接向右上走

(13条消息) 【蓝桥杯】蛇形填数 - Java版解析_猫巳的博客-CSDN博客_java蛇形填数

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CLODVEP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值