打印菱形
菱形规律–1,3,5,7,9,7,5,3,1(在打印九行时的规律)
即2i+1(第一个元素下标为0)
一个上三角形+倒三角形
找准规律,填充空格
一次性打印
int n=9;
for(int i=0;i<n;i++){ //表示行
int mid=n/2; //找到中间行
for(int j=0;j<n;j++){
if(i<=mid){
int start=mid-i;//寻找当前行行*开始的位置
int num=2i+1;//计算当前行*要打多少个
System.out.print(j<start||j>=(start+num)?" ":"*");
//在start之间或者start+num之后均打空格,在start~(start+num)中的打*
}
//倒三角
else{
int start=i-mid;
int num=2*(2*mid-i)+1; //2*mid-i == n-1-i
//2*mind-i可以得到0-mid-1的数则类似上面
System.out.print(j<start||j>=(start+num)?" ":"*");
}
}
System.out.println();
}
分成两部分打印
int n=9;
int mid=n/2
//打印上三角
for(int i=0;i<=mid;i++){ //表示行
//打印空格
for(int j=1;j<=mid-i;j++){
System.out.print(" ");
}
//打印*号
for(int j=1;j<=2i+1;j++){
System.out.print("*");
}
System.out.println();
}
//打印下三角
for(int i=mid+1;i<n;i++){ //表示行
//打印空格
for(int j=1;j<=i-mid;j++){
System.out.print(" ");
}
//打印*号
for(int j=1;j<=2*(n-1-i)+1;j++){
System.out.print("*");
}
System.out.println();
}
杨辉三角
找规律,填充空格
因为下一行的数据需要借助于上一行,因此将每一行的数据放入一个数组便于下一行使用
int num=5
//打印杨辉三角
int[] pre={};
for(int i=1;i<=num;i++){
//打印当前行空格
for(int j=1;j<=num-i;j++){
System.out.print(" ");
}
//打印当前行值
int nowN=pascalPrint(pre,i);
pre=nowN;
for(int j=0;j<nowN.length;j++){
System.out.print(now[j]+" ");
}
System.out.println();
}
//计算杨辉三角的每一行数据
public static int[] pascalPrint(int pre[],int n){
if(n==1)
return new int[]{1};
else if(n==2)
return new int[]{1,1};
else{
int []newN=new int[pre.length+1];
newN[0]=1;
newN[newN.length-1]=1;
for(int i=0;i<pre.length;i++){
newN[i+1]=pre[i]+pre[i+1];
}
}
}
两个数之间的最大公约数与最小公倍数
辗转相除法–最大公约数
用较小数除较大数,再用出现的余数(第一余数)去除除数,
再用出现的余数(第二余数)去除第一余数,如此反复,
直到最后余数是0为止
最小公倍数
两数相乘/最大公约数=最小公倍数
public static int getRollingNumber(int n1,int n2){
if(n1<n2)
n1=n1+n2-(n2=n1);
while (true){
if(n2==0||n1%n2==0)
break;
int i=n1%n2;
n1=n2;
n2=i;
}
return n2;
}