Java 经典数组问题杨辉三角等..

一.利用数组找出一组数的最大最小值

1.求最大值

/**
	 * 求数组中的最大值
	 */
	// @Test
	public void test4() {
		int arr[] = { 12, 35, 15, -45, 15, 82 };

		// 定义max变量并把arr[0]赋值给max
		int max = arr[0];// 假定第一个元素是最大值

		// 外层遍历数组
		for (int i = 0; i < arr.length; i++) {
			// 每个数进行比较 大于max 则赋值给max
			if (arr[i] > max) {
				max = arr[i];
			}
		}

		System.out.println("最大值为" + max);

	}

2.最小值

/**
	 * 求数组的最小值
	 * */
	//@Test
	public void test5() {
		int[] arr = { 61, 76, 23, -12, 332, 86 };
		// 定义min变量并把arr[0]赋值给max
		int min = arr[0];// 假定第一个元素是最小值

		int sum = 0;

		for (int i = 0; i < arr.length; i++) {

			if (arr[i] < min) {//如果arr[i]比min还要小 则赋值给min
				min = arr[i];
			}

			sum += arr[i];
		}

		System.out.println("最小值是" + min);

		System.out.println("和是" + sum);
	}

二.实现数组的倒序输出

数的反转思想

/**
	 * 数组的反转:数组中的元素点到顺序,
	 * 例如:1,2,3,4,5,6
	 *      arr[0] =1 
	 *   
	 *后来:   6,5,4,3,2,1
	 *     arr[0] = 6
	 */
	@Test
	public void test7() {
		
		//实现数组最远端 的数字进行交换
		int arr[] = {1,2,3,4,5,6};
		
		System.out.print("倒序之前-->");
		
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]);
		}
		System.out.println();
		//定义两个变量
		int min = 0,max = arr.length-1;
		
		for (; min<max; min++,max--) {
			int temp = arr[min];
			arr[min] = arr[max];
			arr[max] = temp;
			
		}
		
		System.out.print("倒序之后-->");
		for (int i = 0; i < arr.length; i++) {
			
			System.out.print(arr[i]);
		}
		
		
		
	}

运行结果
运行结果

三.查询数组

1.查询某数在该数组出现的次数

/**
	 * 查询某数在该数组中出现的次数n int arr[] = {1,2,3,4,5,6,7,8,2,3,5,3,2,5,6,7,83,2,3,1,25};
	 */

	// @Test
	public void demo2() {
		int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 2, 3, 5, 3, 2, 5, 6, 7, 83, 2, 3, 1, 25 };

		int num = 2;//也可以设置键盘输入
		int count = 0;//定义一个计数的变量

		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == num) {
				count++;
			}else{
				system.err.println(num+"不在该数组中!");
			}

		}
		System.out.println(num + "出现了" + count + "次");

	}

运行结果如下
在这里插入图片描述

2.查询某数在该数组中出现的第一次出现的索引

/**
	 * 查询某数在该数组中出现的第一次出现的索引 int arr[] =
	 * {1,2,3,4,5,6,7,8,2,3,5,3,2,5,6,7,83,2,3,1,25};
	 */
	@Test
	public void demo3() {
		//定义一个数组
		int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 2, 3, 5, 3, 2, 5, 6, 7, 83, 2, 3, 1, 25 };
		
		//给一个数组中的值 或者设置键盘输入一个值都可以
		int num = 2;
		// 初始值给-1,数组下标从0开始
		int index = -1;
		//遍历这个数组
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == num) {

				// 下标赋给一个变量
				index = i;
				break;
			}
		}
		// 完善判断
		if (index != -1) {
			System.out.println(num + "第一次出现的索引为" + index);
		} else {
			System.out.println(num+"不在这个数组中");
		}

	}

运行结果如下
在这里插入图片描述

四.java数组的杨辉三角

杨辉三角分为直角杨辉三角和等腰杨辉三角,搞清楚其构成原理问题自然解决
下面我们来分析一下

1.直角杨辉三角

不难看出
从第三行开始除去左面第一列 中间的数 = (同一列上一行的数)+(前一列上一行的数)

如果我们定义一个二维数组

例如:
arr[2][3] = arr[2-1][3] + arr[2-1][3-1];

所以:
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];

则三角两条边的一就是每一列每一行的第一个数都是1
在这里插入图片描述

代码如下

/**
	 * 直角杨辉三角 利用二维数组
	 */
	// @Test
	public void demo1() {

		while (1 == 1) {

			Scanner sc = new Scanner(System.in);
			System.out.println("您想打印几行的杨辉三角请输入:");

			int a = sc.nextInt();

			int[][] arr = new int[a][a];

			for (int i = 0; i < arr.length; i++) {

				// 由于只是给杨辉三角内的位置赋值,所以是j<=i
				for (int j = 0; j <= i; j++) {
					// 根据规律,使用if else 赋值

					if (j == 0 || j == i) { // 打印三角两边的 1
						arr[i][j] = 1;

					} else { // 除两边以外 打印内容
						arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
					}

					System.out.print(arr[i][j] + " ");
				}
				System.out.println();
			}

		}
	}

运行结果如下
在这里插入图片描述

2.直等腰杨辉三角
等腰杨辉三角
跟直角的杨辉三角大同小异
我们只需要把两侧空白的三角形 分开打印出来就可以了

在这里插入图片描述
代码如下

/**
	 * 等腰的杨辉三角 利用二维数组
	 */
	@Test
	public void demo2() {
		while (1 == 1) {

			Scanner sc = new Scanner(System.in);
			System.out.println("您想打印几行的杨辉三角请输入:");

			int a = sc.nextInt();

			// 把值赋给数组中
			int[][] arr = new int[a][a];

			for (int i = 0; i < arr.length; i++) {

				// 由于只是给杨辉三角内的位置赋值,所以是j<=i
				for (int j = 0; j <= i; j++) {

					// 根据规律,使用if else 赋值
					if (j == 0 || j == i) { // 打印三角两边的 1
						arr[i][j] = 1;

					} else { // 除两边以外 打印内容
						arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
					}

				}

			}

			// 打印空白部分的三角形
			for (int i = 0; i < arr.length; i++) {

				int num = arr.length - i;  //每一行空白部分越来越少
				for (int j = 0; j <= num; j++) { // 打印空白部分
					System.out.print(" ");
				}
				for (int k = 0; k <= i; k++) { // 打印内容
					System.out.print(arr[i][k] + " ");
				}
				System.out.println();
			}

		}

	}

运行结果如下
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值