这里写目录标题
- 1.递归求n的阶乘
- 2.互质
- 3.例题:奇妙的数字
- 两个数字拼接
- String.toCharArray()方法
- String.valueOf()方法
- 4.例题:美丽的2
- String.contains()方法
- 5.ASCII码---a,A,0的转换
- 6.String[] a---->求sum+=(a[p].charAt(q))-'0';
- 7.复数
- BigInteger 大整数类型
- 本题用到的方法----value.Of() ; add() ; subtract()
- 关于BigInteger初始化为null
- compareTo()方法 : 返回一个int型数据(1 大于; 0 等于 ; -1 小于)
- 8.二维数组按某一列排序
- 9.java中的Scanner 和 IO流
- 9.1 Scanner
- 9.2 IO流
- BufferedReader和BufferedWriter实现快速输入输出(推荐)
- 10.唯一分解性定理
- 11.集合(ArrayList,HashMap,HashSet)详解+ entrySet的应用
- 12.货物摆放例题——(求n的所有因子+foreach循环+set集合应用)
- 参考文件
1.递归求n的阶乘
public class other_1 {public static long factorial(int n) {if(n==0) {return 1;}else {return n*factorial(n-1);}}public static void main(String[] args) {for(int i=1;i<=20;i++) {System.out.println(i+" "+factorial(i));}}
}
2.互质
-
质数
只能被自身和1整除的数为质数 -
互质
常用判断条件 : 最大公约数为1的两个数 互质 -
求最大公约数
假设有两个数A,B--->A=B*q+R则,我们要求的(A,B)的最大公约数 就变成了 求(B,R)的最大公约数,以此类推
3.例题:奇妙的数字
import java.util.ArrayList;
import java.util.Arrays;public class Main {public static void main(String[] args) {for(int i=1;i<2145;i++) {int a=i*i;int b=i*i*i;String c=a+""+b;if(s1(c)) {System.out.println(i);break;}}}public static boolean s1(String c) {char[] x=c.toCharArray();Arrays.sort(x);c=String.valueOf(x);if(c.equals("0123456789")) {return true;}return false;}}
两个数字拼接
int a=2349;int b=69780;String c=a+""+b;sout(c);//输出结果 : 234969780
String.toCharArray()方法
-
作用 : 将字符串(String) 转化为 字符数组
(此题toCharArray()方法的作用是 后面需要对c进行排序,所以需要将c转化为数组形式)String s="729 384";char[] c=s.toCharArray();sout(c);//输出结果 : 729 384
String.valueOf()方法
-
作用 : 将其他数据类型转换为String类型
int a=74982;String s=String.valueOf(a);System.out.println("a的数据类型:"+getType(a));System.out.println("s的数据类型:"+s.getClass().getName());//对于一些基础数据类型,不能直接获取它的数据类型,可用 以下方法public static String getType(Object o) {//通过getClass() ---> java的反射机制 获取数据类型return o.getClass().getName();}//输出结果 : a的数据类型:java.lang.Integers的数据类型:java.lang.String
4.例题:美丽的2
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...int count=0;for(int i=1;i<=2020;i++){String s=i+"";if(s.contains("2")){count++;}}System.out.println(count);scan.close();}
}
String.contains()方法
-
作用 : 判断该String对象中是否包含参数中的字符串
String s="hello world";Boolean b1=s.contains("ell"); //type=trueBoolean b2=s.contains("world"); //type=false
5.ASCII码—a,A,0的转换
a : 97
A : 65
0 : 48
public class Main{public static void main(String[] args) {
// 强制转换 System.out.println((char)65); //ASystem.out.println((char)97); //aSystem.out.println((int)'a'); //97System.out.println((int)'A'); //65// 到 '0'--->0的ASCII码是48System.out.println('A'-'0'); //65-48=17System.out.println('a'-'0'); //97-48=49}
}
6.String[] a---->求sum+=(a[p].charAt(q))-‘0’;
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...
// int[][] a = new int[20+2][20+2];
// for(int i=0;i<20;i++){
// for(int j=0;j<20;j++){
// a[i][j] = scan.nextInt();
// }
// }String[] a = { "69859241839387868941","17615876963131759284","37347348326627483485","53671256556167864743","16121686927432329479","13547413349962773447","27979945929848824687","53776983346838791379","56493421365365717745","21924379293872611382","93919353216243561277","54296144763969257788","96233972513794732933","81443494533129939975","61171882988877593499","61216868895721348522","55485345959294726896","32124963318242554922","13593647191934272696","56436895944919899246"};int count = 0;for(int i=0;i<=15;i++){for(int j=0;j<=15;j++){int sum = 0;for(int p=i;p<i+5;p++){for(int q=j;q<j+5;q++){sum+=(a[p].charAt(q))-'0';}}count = Math.max(count,sum);}}System.out.print(count);scan.close();}
}
7.复数
a+bi
a是实部,b是虚部
在坐标轴上--->相当于a是x,b是y
-
加减法
实部+/-实部 ; 虚部+/-虚部(a+bi)+(c+di) = (a+c)+(b+d)i
-
乘除法
类似于多项式,只不过计算出的 i^2=-1(a+bi)(c+di)=(ac-bd)+(bc+ad)iac+adi+bci+bdi2,因为i2=-1,所以结果是(ac-bd)+(bc+ad)i
BigInteger 大整数类型
常用方法 : 赋值,加减乘除
本题用到的方法----value.Of() ; add() ; subtract()
- value.Of(参数) : 将 参数 转换成指定的数据类型
BigInteger b = BigInteger.valueOf(283);
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...int a = 42;BigInteger f = BigInteger.valueOf(a);System.out.println("f:"+f+" "+f.getClass().toString()); //output : f:42 class java.math.BigInteger
// BigInteger t = 23480; //不能直接这么写(jdk1.8不支持)scan.close();}
}
- add()方法 : 大整数加法
BigInteger a = new BigInteger("6");BigInteger b = new BigInteger("3");System.out.print("a+b="+a.add(b));//output : a+b=9
- subtract()方法 : 大整数减法
BigInteger c = new BigInteger("32");BigInteger d = new BigInteger("20");System.out.print("c-d="+c.subtract(d));//output : c-d=12
- multiply()方法 : 乘法 (用法同上)
- divide()方法 : 除法 (用法同上)
关于BigInteger初始化为null
BigInteger是Java中的一个类,用于处理大整数运算。在Java中,BigInteger的初始值是null,而不是0。当你创建一个BigInteger对象时,如果没有显式地给它赋初值,它将被默认设置为null。
这是因为BigInteger是一个引用类型,而不是基本数据类型。引用类型的默认值是null,表示该引用没有指向任何对象。
如果你想将BigInteger的初始值设置为0,你可以使用BigInteger的构造函数来实现:
BigInteger num = new BigInteger(“0”);
这样就可以将num的初始值设置为0了
compareTo()方法 : 返回一个int型数据(1 大于; 0 等于 ; -1 小于)
BigInteger.ZERO //0
BigInteger.ONE //1
BigInteger.TEN //10
int x = bb.compareTo(BigInteger.ZERO);
//如果 bb > 0 --->x = 1
//如果 bb = 0 --->x = 0
//如果 bb < 0 --->x = -1
8.二维数组按某一列排序
按第一列排序(Lambada表达式写法–常用) :
Arrays.sort(arrays,(o1,o2)->{if(o1[0] == o2[0]){ //如果第一列相同,则按照第二列排序return o1[1]-o2[1];}return o1[0] - o2[0]; //按照第一列排序(升序)
// return o2[0] - o1[0]; //降序
});
如果不需要上面代码的if条件判断 , 更简洁的写法 :
Arrays.sort(arrays,Comparator.comparingInt(o->o[0]));
9.java中的Scanner 和 IO流
以下内容来自AI:
-
Scanner 更适合简单的用户输入处理,
-
而 I/O 流则更灵活、功能更强大,适用于更复杂的输入输出操作。
- Answer在 I/O 流中,最常用的包括以下几种流:1. FileInputStream 和 FileOutputStream:用于处理文件输入和输出的字节流。2. DataInputStream 和 DataOutputStream:用于读写基本数据类型的字节流。3. BufferedInputStream 和 BufferedOutputStream:提供缓冲功能,可以提高读写性能的字节流。4. FileReader 和 FileWriter:用于读写字符数据的字符流。5. BufferedReader 和 BufferedWriter:提供缓冲功能,可以提高读写性能的字符流。这些流在处理文件读写时非常常用,能够满足大部分的输入输出需求。
9.1 Scanner
- 使用Scanner类进行输入
//不同数据类型,使用不同的 nextXXX() 方法
public class Main{Scanner scan = new Scanner(System.in); //用于控制台从键盘输入数据int a = scan.nextInt();double b = scan.nextDouble();long c = scan.nextLong();short d = scan.nextShort();//字符串的输入String s1 = scan.next();String s2 = scan.nextLine();
}
- next() 和 nextLine()的区别next()是 从缓冲区接受字符 遇到空格后停止nextLine()是 从缓冲区接受字符,并且接受空格,遇到换行才停止,并且会自动舍弃换行。- 简单的说就是:
- next() 遇到空格就停止输入了
- nextLine()是遇到回车停止输入
- 例子如下:
String s1 = scan.next(); //输入:sjfosiejfo jesofiString s2 = scan.nextLine(); //输入:hsefjoieo joefjefSystem.out.println(s1); //输出:sjfosiejfoSystem.out.println(s2); //输出:hsefjoieo joefjef
- hasNext() 方法输入——(目前我还没用过)
//hasNext()方法—>多组输入的时候可以用它
hasNext() 返回值是bool值- 作用:当在缓冲区内扫描到字符时,会返回true,否则会发生阻塞,等待数据输入(不会返回false)
// 每次输入三个数,输入三数之和while(scan.hasNext()) {int a = scan.nextInt();int b = scan.nextInt();int c = scan.nextInt();int sum = a+b+c;System.out.println(sum);}
//还有hasNext() //判断缓冲区中还有没有数据,有返回true,否则等待输入hasNextInt() //判断输入的是不是int型数据,是 返回true,否则继续扫描缓冲区,或者等待输入hasNextDouble() //判断输入的是不是double型数据,是 返回true,否则继续扫描缓冲区,或者等待输入
9.2 IO流
IO流对文件的操作主要分为字节流和字符流
- 字符流
字符流有两个抽象类:Writer和Reader类
其对应子类FileWriter和FileReader可实现文件的读写操作
BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率。
BufferedReader和BufferedWriter实现快速输入输出(推荐)
-
BufferedReader
BufferedReader in = new BufferedReader(new InputStreamReader(System.in);
常用方法:
int read() //读取单个字符
int read(char[] cbuf,int off,int len) //将字符读入数组的某一部分
String readLine() //读取一个文本行
String s = in.read(); //读入一个字符 可读入空格回车 但不抛弃回车
String s1 = in.readLine(); //读入一行 可读入空格/回车 但回车会抛弃
String s2[] = in.readLine().Split(" "); //使用split通过空格分割读入的一行字符串,存在s2中
- BufferedWriter
常用方法:write()
注意:write()不能直接输出int类型—》会输出对应的ASCII码
10.唯一分解性定理
!!!求n!中5的个数—》其实就是求n中5的个数 !!!
素数(素数判定 , 素数筛 , 唯一分解定理 , 约数定理)
11.集合(ArrayList,HashMap,HashSet)详解+ entrySet的应用
集合(ArrayList,HashMap,HashSet)详解+ entrySet的应用
12.货物摆放例题——(求n的所有因子+foreach循环+set集合应用)
货物摆放例题——(求n的所有因子+foreach循环+set集合应用)
参考文件
- java 二维数组按某一列排序
- java中BigInteger用法的详解