杨辉三角,数学黑洞

《杨辉三角,数学黑洞》

《杨辉三角,数学黑洞》

杨辉三角,我的思想是,使用不规则的二位数组来存取

每一行的第一个元素和最后一个元素都先赋为1

中间的元素则按照规则来计算,没生成一行元素则扩容,增加一行且这行的列数比上一行多1

上代码:

import java.util.Scanner;
public class test{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a[][]=new int[0][0];
//新数组从0行0列依次扩容
for(int i=0;i<n;i++){
a=expand(a);
}
printArray(a);
}
public static int[][] expand(int[][] a){//数组扩容函数
//定义一个比a数组多一行的结构相同新数组
int[][] newArray=new int[a.length+1][];
for(int i=0;i<a.length;i++){
newArray[i]=new int[a[i].length];
}
//判断a数组行数是否为0,新数组最后一行列数加一
if(a.length==0) newArray[a.length]=new int[1];
else newArray[a.length]=new int[a[a.length-1].length+1];
//复制a数组的前a.length行元素到新数组
System.arraycopy(a,0,newArray,0,a.length);
//新数组第一个元素和最后一个元素赋值为1
newArray[a.length][0]=1;
if(a.length>0){//判断a数组长度是否为0,不为0的按照规则计算
newArray[a.length][a[a.length-1].length]=1;
for(int i=1;i<a[a.length-1].length;i++){
newArray[a.length][i]=newArray[a.length-1][i]+newArray[a.length-1][i-1];
}
}
return newArray;
}
public static void printArray(int[][] a){//数组遍历函数
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+”\t”);
}
System.out.println(“\n”);
}
}
}

《杨辉三角,数学黑洞》

这是一个非常有趣的数学结论,每次只需要取得这个四位数的每一位,然后组合得到一个最大的数和最小的数

上代码:

import java.util.Arrays;
import java.util.Scanner;
public class test{
public static void main(String[] args){
int n;
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
mathBlackHole(n);

}
public static int mathBlackHole(int n){
if(n==6174){
System.out.println(“成功”);
return 0;
}
int[] a=new int[4];
a[0]=n/1000;
a[1]=n%1000/100;
a[2]=n%100/10;
a[3]=n%10;
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]){
System.out.println(“输入有误”);
return 0;
}
Arrays.sort(a);
int max=a[3]*1000+a[2]*100+a[1]*10+a[0]; 
int min=a[0]*1000+a[1]*100+a[2]*10+a[3];
System.out.println(max+”-“+min+”=”+(max-min));
n=mathBlackHole(max-min);
return max-min;
}
}

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/u012891504/article/details/38390859
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞