首页 > 其他分享 >SMU冬训营第二周蓝桥杯模拟赛

SMU冬训营第二周蓝桥杯模拟赛

时间:2023-01-15 18:55:59浏览次数:38  
标签:charAt int SMU 冬训 Scanner 蓝桥 str public String

A.解码

题目:

小明有一串很长的英文字母,可能包含大写和小写。

在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。 例如,连续的 55 个 a,即 aaaaa,小明可以简写成 a5(也可能简写成 a4a、aa3a 等)。

对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方便表达,小明不会将连续的超过9个相同的字符写成简写的形式。
现在给出简写后的字符串,请帮助小明还原成原来的串。
例如:
输入H3el5o2
输出HHHellllloo

思路:

0-9的ASCII码是48-57。遍历数组,如果是字母,就放到另一个字符串里面,如果该字符是数字就转化为整型,然后将前面的字母循环这个数字-1次放入新数组。

代码:

点击查看代码
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String str = scanner.next();
		String str2 = "";
		for(int i = 0;i<str.length();i++) {
			if(str.charAt(i)>=48&&str.charAt(i)<=57) {
				String ch = str.charAt(i)+"";
				int n = Integer.parseInt(ch);
				for(int j = 0;j < n-1;j++) {
					str2 += str.charAt(i-1);
				}
			}else {
				str2+=str.charAt(i);
			}
		}
		System.out.println(str2);
	}
}

B.成绩分析

题目:

小蓝给学生们组织了一场考试,卷面总分为 100分,每个学生的得分都是一个 0 到 100 的整数。
请计算这次考试的最高分、最低分和平均分。

思路:

就是求最大值,最小值和平均值

代码:

点击查看代码
import java.util.Scanner;
public class MainB {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[] arr = new int[n];
		int max,min;
		double avg,sum;
		for(int i = 0;i < n;i++) {
			arr[i] = scanner.nextInt();
		}
		max = 0;
		min = 100;
		sum = 0;
		for(int i = 0;i < n;i++) {
			if(arr[i]>max) {
				max = arr[i];
			}
			if(arr[i]<min) {
				min = arr[i];
			}
			sum+=arr[i];
		}
		avg = sum/n;
		System.out.println(max);
		System.out.println(min);
		System.out.printf("%.2f",avg);
	}
}

C.整除序列

题目:

有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,请输出这个序列中值为正数的项。

思路:

循环将这个数除2并输出,直到除到1为止

代码:

点击查看代码
import java.util.Scanner;
public class MainC {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		long n = scanner.nextLong();
		long num = n;
		while(num>=1) {
			System.out.print(num+" ");
			num = num/2;
		}
	}
}

D.日期识别:

题目:

小蓝要处理非常多的数据, 其中有一些数据是日期。

在小蓝处理的日期中有两种常用的形式:英文形式和数字形式。

英文形式采用每个月的英文的前三个字母作为月份标识,后面跟两位数字表示日期,月份标识第一个字母大写,后两个字母小写, 日期小于 1010 时要补前导 00。11 月到 1212 月英文的前三个字母分别是 Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec。

数字形式直接用两个整数表达,中间用一个空格分隔,两个整数都不写前 导 0。其中月份用 11 至 1212 分别表示 11 月到 1212 月。

输入一个日期的英文形式, 请输出它的数字形式。

例如:输入Feb08,输出28

思路:

因为是字符串的格式是固定的,可以先将后面两个字符转化为数字,得到日期。声明一个字符串数组,里面是按顺序排列的12个月的英文,进行匹配输出月份即可。

代码:

点击查看代码
import java.util.Scanner;
public class MainD {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int day;
		String str = scanner.next();
		String[] str1 =new String[] {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
		String dstr = "";
		for(int i = 3;i < str.length();i++) {
			dstr+=str.charAt(i);
		}
		day = Integer.parseInt(dstr);
		for(int i = 0;i < 12 ;i++) {
			if(str.contains(str1[i])) {
				System.out.println(i+1+" "+day);
				break;
			}
		}
	}
}

E.回文日期

题目:

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 yyyymmdd 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

有人表示 20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。

也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。

给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
说明:
对于所有评测用例,10000101 <= N <= 89991231,保证 N 是一个合法日期的 8 位数表示。

!!!注意把题目看清楚,题目说输入最大是89991231,所以应该考虑的范围是该数到99999999。

思路:

这道题首先想的是一天一枚举,这样是会超时的,后面想到可以一年一枚举,判断它是不是合法回文日期就行了。我们可以将前面四个数分离出来枚举,因为后面四个数就是翻转过来的,只需要判断后四位数的翻转是不是合法日期就行。判断合法日期的时候也要注意闰年和平年。

代码:

点击查看代码
import java.util.Scanner;
public class MainE2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		for(int i = n/10000+1;i<9999;i++) {
			if(!IsLegel(i)) {
				continue;
			}
			String str = i+"";
			String str1 = "";
			for(int j = 3;j >= 0;j--) {
				str1 += str.charAt(j);
			}
			str+=str1;
			System.out.println(str);
			break;
		}
		for(int i = n/10000+1;i<8999;i++) {
			if(!IsLegel(i)) {
				continue;
			}
			String str = i+"";
			String str1 = "";
			for(int j = 3;j >= 0;j--) {
				str1 += str.charAt(j);
			}
			str+=str1;
			if(str.charAt(0)==str.charAt(7)&&str.charAt(7)==str.charAt(2)&&str.charAt(2)==str.charAt(5)) {
				if(str.charAt(1)==str.charAt(3)&&str.charAt(3)==str.charAt(4)&&str.charAt(4)==str.charAt(6)&&str.charAt(0)!=str.charAt(1) ) {
					System.out.println(str);
					break;
				}
			}
		}
		
	}
	public static boolean IsLegel(int n ) {
		String str = n + "";
		String str1 = "";
		String str2 = "";
		String str3 = "";
		int month = 0,day = 0;
		for(int i = 3;i >= 0;i--) {
			str1+=str.charAt(i);
		}
		str2 = ""+str1.charAt(0)+str1.charAt(1);
		str3 = ""+str1.charAt(2)+str1.charAt(3);
		month = Integer.parseInt(str2);
		day = Integer.parseInt(str3);
		int[] arr = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
		if((n%4==0&&n%100!=0)||(n%400==0)) {
			arr[2] = 29;
		}
		if(month>12) {
			return false;
		}else {
			if(day>arr[month]) {
				return false;
			}else {
				return true;
			}
		}
	}
}

F.走方格

题目:

在平面上有一些二维的点阵。

这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。

现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。

注意,如果行号和列数都是偶数,不能走入这一格中。

问有多少种方案。

思路:

代码:

G.乘法表

题目:

九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。

例如, 四进制下的乘法表如下所示:

1 * 1=1
2 * 1=2 2 * 2=10
3 * 1=3 3 * 2=12 3 * 3=21
请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。

给定 P,请输出 P 进制下的乘法表。

输入格式
输入一个整数 P。

输出格式
输出 P 进制下的乘法表。P 进制中大于等于 10 的数字用大写字母 A、B、C、⋯ 表示。

例如:
输入:
11
输出:

1*1=1 
2*1=2 2*2=4 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 4*3=11 4*4=15 
5*1=5 5*2=A 5*3=14 5*4=19 5*5=23 
6*1=6 6*2=11 6*3=17 6*4=22 6*5=28 6*6=33 
7*1=7 7*2=13 7*3=1A 7*4=26 7*5=32 7*6=39 7*7=45 
8*1=8 8*2=15 8*3=22 8*4=2A 8*5=37 8*6=44 8*7=51 8*8=59 
9*1=9 9*2=17 9*3=25 9*4=33 9*5=41 9*6=4A 9*7=58 9*8=66 9*9=74 
A*1=A A*2=19 A*3=28 A*4=37 A*5=46 A*6=55 A*7=64 A*8=73 A*9=82 A*A=91

说明/提示
对于所有评测数据, 2≤P≤36。

思路:

题目中输入P,输出P-1行,这个题的提示说2≤P≤36,那就是9个数字+26个英文字母刚好35行。题目说P 进制中大于等于 10 的数字用大写字母 A、B、C、⋯ 表示,也就是说10就要用A来表示了,而且等号的两边只要出现9以上的数字,都是要用字母来表示的,因为字母比较少,我就之间用了一个字符类型的数组,存储的然后根据对应的顺序来使用的。并且在输出的时候都是分类输出的,做这道题的时候一定要细心。

代码:

点击查看代码
import java.util.Scanner;
public class MainH1 {
	static char[] ch =new char[] {' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N',
			'O','P','Q','R','S','T','U','V','W','X','Y','Z'};
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		for(int i = 1;i < n;i++) {
			for(int j = 1;j <= i;j++) {
				String result = mul(i,j,n);
				if(i>=10&&j>=10) {
					System.out.printf("%c*%c=%s ",ch[i-9],ch[j-9],result);
				}else if(i>=10&&j<10) {
					System.out.printf("%c*%d=%s ",ch[i-9],j,result);
				}else if(i<10&&j>=10) {
					System.out.printf("%d*%c=%s ",i,ch[j-9],result);
				}else {
					System.out.printf("%d*%d=%s ",i,j,result);
				}
			}
			System.out.println();
		}
	}
	public static String mul(int i,int j,int n) {
		int result = i*j;
		if(result<n) {
			String s = result+"";
			if(result>=10) {
				s = ch[result-9]+"";
			}
			return s;
		}else {
			int a = result / n;
			int b = result % n;
			String s1 = a+"";
			String s2 = b+"";
			if(a>=10) {
				s1 = ""+ch[a-9];
				
			}
			if(b>=10) {
				s2 = ""+ch[b-9];
			}
			return s1+s2;
		}
	}
}

标签:charAt,int,SMU,冬训,Scanner,蓝桥,str,public,String
From: https://www.cnblogs.com/Tcoo/p/17038827.html

相关文章

  • SMU Winter 2023 Round #3 (Div.2)
    B.三元组题目:给定一个长度为n的数列a,对于一个有序整数三元组(i,j,k),若其满足1≤i≤j≤k≤n并且ai+aj=ak,则我们称这个三元组是「传智的」。现在请你计算,有......
  • SMU Winter 2023 Round #4
    A.Chuanpai题目:Chuanpai(川牌)isakindoftraditionalplayingcardsinSichuan.Eachcardismarkedwithtwointegersxandywhere1≤x≤y≤6.Somesa......
  • P8723 [蓝桥杯 2020 省 AB3] 乘法表
    题目描述九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。例如,四进制下的乘法表如下所示:1*1=12*1=22*2=103*1=33*2=123*3=21请注意,乘......
  • P8716 [蓝桥杯 2020 省 AB2] 回文日期
    题目描述2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按 yyyymmdd 的格式写成一个 88 位数是 20200202,恰好是一个回文......
  • 蓝桥杯学习
    1,九进制转换成十进制做错题了,但是也是简单的签到题, importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){......
  • 蓝桥杯 X进制减法
    题目描述进制规定了数字在数位上逢几进一。X进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种X进制数,最低数位为二进制,第二数位为十进制,第三数位为......
  • 2014蓝桥
    中国古代文献中,曾记载过“大衍数列”,主要用于解释中国传统文化中的太极衍生原理。它的前几项是:0、2、4、8、12、18、24、32、40、50...其规律是:对偶数项,是序号平方再......
  • 蓝桥杯 修剪灌木
    题目描述爱丽丝要完成一项修剪灌木的工作。有N棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为0厘米。爱丽丝修剪灌木的顺序是从......
  • 第12届蓝桥杯JavaB组省赛
    第12届蓝桥杯JavaB组省赛前言用时及分数自测开始时间:\(2023年1月11日16:00\)自测结束时间:\(2023年1月11日18:05\)自测用时:约\(2\)小时最终得分:\(20(35)\)PS:此处......
  • 《冬训周报二》
    埃氏筛选法概念埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的......