原题链接:(13条消息) 星系炸弹-蓝桥杯-基础-CSDN算法技能树
星系炸弹
题目
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
问题分析
题意就是计算 给定日期1000天后对应的日历时间
考虑平年闰年情况
考虑包含多少闰年
可以使用数组方法计算,不过有点麻烦,但也是锻炼算法能力的过曾
可以使用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
问题分析
实现该问题重点在于判断出哪个数包含特定数字,然后再进行累加就可以
可以使用字符串函数contains()包含函数检测
可以使用遍历方法
代码实现
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当到达边界时,判断它应该向右走还是向下走,向右走完就直接向左下走,向下走完就直接向右上走