杨辉三角和回形数相关代码

杨辉三角的解题思路是:

        定义一个十行的数组,列用循环定义,每一行比上一行多一个;

        int[][] arr = new int[10][];

        如图:

 可以看到最左边,和斜边都是1,这样的话,在循环里是不是可以这样定义:

        连续赋值,第一个和最后一个都为1;

        arr[0]=arr[i]=1;

其次从第三行开始看,可以发现每一个数都是都是它上面的数加上面左边的数。

再在循环里加个循环,来遍历数组;

        for(int j=1;j<arr[i].length;j++):这个循环的最大数一定不大于,arr[i]的当前长度,随着i的增加,长度才能增加

        那么,arr[i][j]:当前数

                   arr[i-1][j-1]:当前数的上面左边的数

                   arr[i-1][j]:当前数的上面的数

        把他们的数赋值给当前数,这样就行了

代码:

package ArrayDemo1;
/*
* 杨辉三角形
* */
public class ArrayText1 {
    public static void main(String[] args) {
//        静态定义数组
        int[][] arr = new int[10][];
        for(int i=0;i<arr.length;i++){

//          定义二维数组中一维数组的长度
            arr[i]=new int[i+1];
      
            arr[i][0]=arr[i][i]=1;

//          赋值
            for (int j=1;j<arr[i].length-1;j++){
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
            }
        }



//        遍历数组
        for (int i=0;i<arr.length;i++){
            for (int a=0;a<arr[i].length;a++){
                System.out.print(arr[i][a]+"\t");
            }
            System.out.println();
        }
    }
}

回形数:

        解题思路:

        我们首先需要个数组:int[][] arr = new int[][];

        其次我们需要四个来判断,向右,向下,向左,向上的四个变量;

        然后再来两个变量i,j来确定数组的位置。

        最后通过循环来给数组赋值:

代码:

package ArrayDemo1;
/*
* 回形数
* */
import java.util.Scanner;

public class ArrayDemo2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
//         输入边长
        System.out.println("请输入矩形方阵的边长:");
        int num= sc.nextInt();
//         这是总数,一共打印num1次
        int num1=num*num;
//          数组长度
        int[][] arr = new int[num][num];
//          四个方向变量
        int right=1;
        int down=2;
        int ligft=3;
        int top=4;
//           确定数组位置的变量
        int i=0,j=0;
//          把方向的量赋值给一个判断方向的条件
        int a=right;
//          循环赋值
        for(int m=1;m<=num1;m++){
//          判断方向是否向右
            if(a==right){
//          判断有没有大于定义的长度,和这个位置上是不是已经被赋值了
                if(j<num && arr[i][j]==0){
//          把m循环数赋值给第一个数组元素
                    arr[i][j++]=m;
                }else{
//          这时说明向右已经赋值好了,把向下的量赋值给a
                    a=down;
//          i++是使数组换行
                    i++;
//          j--因为结束,j加了一个1
                    j--;
//          这次循环没有赋值,所以要减1
                    m--;
                }
            }else if(a==down){
                if(i<num && arr[i][j]==0){
                    arr[i++][j]=m;
                }else {
                    a = ligft;
                    i--;
                    j--;
                    m--;
                }
            }else if(a==ligft){
                if(j>=0 && arr[i][j]==0){
                    arr[i][j--]=m;
                }else{
                    a=top;
                    i--;
                    j++;
                    m--;
                }
            }else if(a==top){
                if(i>=0 && arr[i][j]==0){
                    arr[i--][j]=m;
                }else{
                    a=right;
                    i++;
                    j++;
                    m--;
                }
            }
        }
//               遍历输出回形数
        for(int wai=0;wai<arr.length;wai++){
            for (int nei=0;nei<arr[wai].length;nei++){
                System.out.print(arr[wai][nei]+"\t");
            }
            System.out.println();
        }
    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

老板大气,I am happy

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值