Notes
2020.04.10 BEGIN1-4 + BASIC1-3
等比数列等差数列求和时,大概率是会超限的,所以可能会用到长整型long,不要采用for循环递加,会超时,直接用公式 (1)等差数列求和公式S = n(a1+an)/2 (2)等比数列求和公式S = [a1(1-q^n)]/(1-q) 规定小数点位数输出和规定位数输出(前加0) 创建小数格式DecimalFormat对象dFormat 使用dFormat调用format方法输出
DecimalFormat dFormat = new DecimalFormat ( "#0.0000000" ) ;
System. out. print ( dFormat. format ( r) ) ;
DecimalFormat dFormat = new DecimalFormat ( "00" ) ;
System. out. print ( dFormat. format ( h) ) ;
创建数组,不会吧不会吧不会有人连数组都不会创建吧(记得开大一点)
int arr[ ] = new int [ n] ;
int a[ ] [ ] = new int [ m] [ n] ;
十进制转其他进制字符串
String s2 = Integer. toBinaryString ( i) ;
String s16 = Integer. toHexString ( i) ;
String s8 = Integer. toOctalString ( i) ;
本来打算看代码的……实在没忍住又上手敲了…… 整型和字符直接强制转换即可
int num = ( int ) 'A' + i;
char c = ( char ) num;
2020.04.12 BASIC4-17
转换大小写
s. toUpperCase ( ) ;
s. toLowerCase ( ) ;
字符串下标记法
s. charAt ( i) ;
字符串过长时可使用StringBuffer类,顺便一提BASIC-12重做的时候给我气吐血了因为E的二进制写错了导致找了半个小时bug我真傻 StringBuffer中的append()方法可在字符串末尾添加字符 Arrays.sort()数组从小到大排序 写判断素数的方法时,循环终止条件为i<=Math.sqrt(i),不要忘记等于的情况 矩阵幂次方乘法时,记得矩阵0次幂是单位矩阵(对角线为0),每乘完一次讲结果矩阵ans清零。
2020.04.13 BASIC18-34
两矩形相交求相交矩形面积,可以通过比较横纵坐标,例如选择两右边(横坐标大)的较小值,两上边(纵坐标大)的较小值确定右上角,同样方法确定左下角,此时判断右上角的横纵坐标比左下角的横纵坐标均大,否则无法相交。 贪心——每次只考虑一步 如果有特定输出,一定要复制啊!不然单词打错了太亏了就 字符串的子串
str = s. substring ( index1, index2) ;
StringBuilder/StringBuffer可进行指定下标元素删除,如需转化为字符串格式,需调用toString()
sBuilder. deleteCharAt ( index) ;
sBuffer. deleteCharAt ( index) ;
s1 = sBuilder. toString ( ) ;
s2 = sBuffer. toString ( ) ;
字符串数组创建
String[ ] s = new String [ ] { "zj" , "wyb" , "xz" } ;
String[ ] str = new String [ 10 ] ;
回型取数中,已取标记为-1 数组排序
Arrays. sort ( arr) ;
Arrays. sort ( arr, fromindex, toindex) ;
2020.04.13 ALGO1-
最大公因数gcd和最小公倍数
import java. util. Scanner;
public class Main {
public static void main ( String[ ] args) {
Scanner scanner = new Scanner ( System. in) ;
int a = scanner. nextInt ( ) ;
int b = scanner. nextInt ( ) ;
System. out. println ( "最小公倍数:" + a * b / gcd ( a, b) ) ;
System. out. println ( "最大公因数:" + gcd ( a, b) ) ;
}
public static int gcd ( int a, int b) {
if ( a < b) {
int t;
t = a;
a = b;
b = t;
}
while ( b != 0 ) {
if ( a == b) {
return a;
} else {
int t = a % b;
a = b;
b = t;
}
}
return a;
}
}
如果是明显的算法题,不要慌,画图画图 对一个超大数字取模的时候先创建一个变量为这个数字再进行运算。 注意循环变量啊出问题很大可能是i和j分不清 可,我已经看不懂寒假写的dfs了