题解3:蛇形方阵、珠心算测验

题解3:蛇形方阵、珠心算测验

蛇形方阵

题目:在这里插入图片描述
题解:



import java.util.Scanner;


public class Main08281 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();//扫描框内的数字n
        int[][] arr = new int[n][n];//定义二维数组,用来存放二维数据(前为行,后为列)
        int num = 1;//控制第一个数字为1
        int left = 0, right = n - 1, up = 0, down = n - 1;//初始值为0,每行每列都有n个数,最后为n-1
        //一定要加while循环,不然只能执行一轮!
        while (num <= n * n) {
            //从左向右
            for (int i = left; i <= right; i++) {
                arr[up][i] = num++;
//遍历数组,表示行不变,列改变。列递增后num值逐渐加1。
            }
            up++;//上边的行要逐渐加1
            //从上到下
            for (int i = up; i <= down; i++) {
                arr[i][right] = num++;
                //遍历数组,表示列不变,行改变。列递增后num值逐渐加1。
            }
            right--;//右边的列要逐渐减1
            //从右到左
            for (int i = right; i >= left; i--) {
                arr[down][i] = num++;
            }
            down--;
            //从下到上
            for (int i = down; i >= up; i--) {
                arr[i][left] = num++;
            }
            left++;
        }
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    //保留3位字符,右对齐
                    System.out.printf("%3d", arr[i][j]);
                }
                System.out.println();
            }
        }

    }

珠心算测验

在这里插入图片描述
题解



import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
//程序主入口

        Scanner sc = new Scanner(System.in);//创建Scanner对象,接收键盘输入
        int n = sc.nextInt();//读取第一个整数n,表示一共有多少个数字
        int[] a = new int[n];//定义数组a,长度为n,用来存放n个数字
        boolean[] flag = new boolean[n];//布尔标记数组flag,标记对应下标是否满足条件,初始值为false
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();//读取输入数字,赋值给数组的相应位置
        }
        //使用枚举法,查找符合条件的元素
        //j取第一个数的下标,遍历每一个元素
        for (int j = 0; j < n; j++) {
        //k取j后一个下标,保证两数不重复
            for (int k = j + 1; k < n; k++) {
            //取出a[j]和a[k]两数相加,得到sum
                int sum = a[j] + a[k];
                
                for (int i = 0; i < n; i++) {
                //判断sum是否等于数组中的一个元素
                //如果满足条件,flag对应下标标记为true
                    if (a[i] == sum) {
                        flag[i] = true;
                    }
                }
            }
        }
        //设置一个计数器,初始值为0,统计满足条件的数字总个数
        int count = 0;
        //遍历数组
        for (int i = 0; i < n; i++) {
        //如果flag[i]等于true,代表该数满足条件
            if (flag[i]) {
                count++;//计数器+1
            }
//注意:最后的打印语句不要放到此处,这是for循环的里面,会将每一轮的结果打印出来
        }
        System.out.println(count);//打印最终统计得到的数据
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值