欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥杯总结

程序员文章站 2022-07-03 12:36:01
...

注意

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.不要省略括号,注意规范

高精度计算

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*", "");可以替换大部分空白字符, 不限于空格
\s 可以匹配空格、制表符、换页符等空白字符的其中任意一个

求正整数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");

相关标签: 算法