蓝桥杯 day01 奇怪的数列 特殊日期
2023-12-13 23:51:38
奇怪的数列
题目描述
奇怪的数列
从 X 星截获一份电码,是一些数字,如下:
13
1113
3113
132113
1113122113
??
YY 博士经彻夜研究,发现了规律:
第一行的数字随便是什么,以后每一行都是对上一行"读出来"
比如第 2 行,是对第 1 行的描述,意思是:1 个 1,1 个 3,所以是:1113
第 3 行,意思是:3 个 1,1 个 3,所以是:3113
请你编写一个程序,可以从初始数字开始,连续进行这样的变换。
输入描述
第一行 输入一个数字组成的串,不超过 100 位。
第二行,一个数字?n,表示需要你连续变换多少次,n?不超过 20。
输出描述
输出一个串,表示最后一次变换完的结果。
输入输出样例
示例
输入?
5
7
输出
13211321322115
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
我的解答:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
/**
* 计算传入字串第一个字符连续出现的个数
*/
private static int countNum(String s){
int cnt=1;
// 获取字符串第一个字符
char c = s.charAt(0);
for(int i=1;i<s.length();i++){
if(c == s.charAt(i)){
cnt++;
}else{
break;
}
}
return cnt;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
// 初始化结果字符串
String result = new String();
// m 不超过100
String m = scan.next();
// n 不超过 20
int n = scan.nextInt();
// 经过 n 次变换
for(int i=1;i<=n;i++){
StringBuilder temp = new StringBuilder();
for(int j=0;j<m.length();){
// 需要处理的子串
String subString = m.substring(j);
// 拿到当前数字
char subChar = subString.charAt(0);
// 拿到m中前面数字的长度
int cnt = countNum(subString);
// 追加当前数字出现的个数
temp.append(cnt);
// 追加当前数字
temp.append(subChar);
j+=cnt;
}
m = temp.toString();
result = m;
}
System.out.println(result);
scan.close();
}
}
特殊日期
问题描述
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从?19001900?年?11?月?11?日至?99999999?年?1212?月?3131?日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
例如,20222022?年?1111?月?1313?日满足要求,因为?2+0+2+2=(1+1)+(1+3)2+0+2+2=(1+1)+(1+3)?。
请提交满足条件的日期的总数量。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
/**
* 通过 month 获取日期
*/
private static int getDayByMonth(int year,int month){
// 二月的天数
int febDay;
febDay = (year%4==0 && year%100!=0 || year%400==0)? 29 : 28;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return febDay;
}
return febDay;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int cnt=0;
//在此输入您的代码...
for(int year=1900;year<9999;year++){
for(int month=1;month<=12;month++){
for(int day=1;day<=getDayByMonth(year,month);day++){
if(year/1000 + year%1000/100 + year%100/10 + year%10 == month/10 + month%10 + day/10 + day%10 ){
cnt++;
}
}
}
}
System.out.println(cnt);
scan.close();
}
}
感觉挺简单的,没什么难度。
文章来源:https://blog.csdn.net/m0_46745664/article/details/134891440
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!