蓝桥杯经验

注意

1.循环比递归效率高,可以用循环解决的少用递归
2.取模求余时,需要在两数各自取模相加后再取模一次

for(int i=2;i<n;i++)
    arr[i]=arr[i-1]%10007+arr[i-2]%10007;
System.out.println(arr[n-1]%10007);

3.尽量使用long,不用int
4.不要省略括号,注意规范
5.浮点数计算不准确,需要将浮点数转换为整数

高精度计算
Scanner cin = new Scanner(System.in);
BigDecimal a = cin.nextBigDecimal();
BigDecimal b = cin.nextBigDecimal();
//高精度浮点数相加
System.out.println(a.add(b));
//高精度浮点数相减
System.out.println(a.subtract(b));
//高精度浮点数相乘
System.out.println(a.multiply(b));
//高精度浮点数相除
System.out.println(a.divide(b));
//高精度浮点数取模
System.out.println(a.remainder(b));
//高精度浮点数取模并保留小数
System.out.printf("%.9f",a.remainder(b));
System.out.println(a.add(BigDecimal.ONE).multiply(a).divide(BigDecimal.valueOf(2)));
字符串处理
1、从字符串中提取所有数字
int num=Integer.parseInt(s.replaceAll("\\D+",""));
注:正则表达式“\\\D+”是匹配非数字
2、将字符串中的所有数字去除
String str=s.replaceAll("\\d+","");
注:正则表达式“\\\d+”是匹配数字
3、将字符串中所有空格去除
String str=s.replaceAll("\\s+","");
4、String.trim()去掉首尾空格
5、str.replace(" ", ""); 去掉所有空格,包括首尾、中间
6、或者replaceAll(" +",""); 去掉所有空格
7、str = .replaceAll("\\s*", "");可以替换大部分空白字符, 不限于空格
8、字符串反转:new StringBuffer(s).reverse();
\s 可以匹配空格、制表符、换页符等空白字符的其中任意一个
时间处理
1.判断year是否为闰年
new GregorianCalendar().isLeapYear(year)

求正整数m和n最大公约数和最小公倍数。

最小公倍数算法:

  • 最小公倍数=m*n/gcd(m,n)

辗转相除法:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①

代码:

import java.util.Scanner;
class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int a=sc.nextInt();
		int b=sc.nextInt();
		System.out.println(gcd(a,b));
		System.out.println(a*b/gcd(a,b));
	}
	public static int gcd(int a,int b) {
		return b==0?a:gcd(b,a%b);
	}
}
nextline和nextInt连用问题

问题分析:
nextLine()会把nextInt(),next(),nextDouble(),nextFloat()的结束换行符作为字符串读入,进而不需要从键盘输入字符串nextLine便已经转向了下一条语句执行。
解决办法:
在每一个nextInt(),next(),nextDouble(),nextFloat()后都加一个nextLine()语句,将被next()去掉的Enter过滤掉。

比较字符串内容时用equals(),== 比较的是地址
栈:LinkedList的 add() 和 removeLast()
队列:LinkedList的 add() 和 removeFirst()
取整数n中某一位:除以要取的位x再模10;

例如:
取个位:n/1%10;
取十位:n/10%10;
取百位:n/100%10;

要计算只包含加法、减法和乘法的整数表达式除以正整数n的余数,可以在每步计算之后对n取余。

进制转换

将10进制的 i 转换为 x 进制的a:
String a = Integer.toString(i,x) ;
将 x 进制的 s 转换为10进制的a:
String a = Integer.valueOf("s",x);
将 x 进制的 s 转换为 y 进制的b:
String b = Integer.toString(Integer.valueOf("s",x),y);

检查数组中是否包含某一个值

先使用Arrays.asList()将Array转换成List,这样就可以用动态链表的contains函数来判断元素是否包含在链表中。
boolean b = Arrays.asList(array).contains("a");

总结:

比赛时要注意审题,不要怀疑样例数据的正确性
时间要先分配好
开始比赛前可以先把模板写好,不要在那等着开始

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值