蓝桥杯总结
程序员文章站
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");