二维数组和面向对象练习

举报
周小末天天开心 发表于 2022/11/19 16:26:05 2022/11/19
【摘要】 二维数组以及面向对象练习题

一、杨辉三角

使用二维数组,打印一个10行的杨辉三角

        1
        1 1
        1 2 1
        1 3 3 1
        1 4 6 4 1
        1 5 10 10 5 1

        ……

规律:

1)第一行有一个元素 第 n 行有 n 个元素

2)每一行第一个元素和最后一个元素都为 1

3)从第三行开始 , 对于非第一个元素和最后一个元素的值

        arr [i] [j] = arr[i - 1] [j] + arr[ i - 1] [j - 1];   (该数为:上一行的该列 + 上一行的前一列的值)

演示:

public class YangHui {
	public static void main(String[] args) {
		
		int[][] yangHui = new int[10][];// 十行杨辉三角所以有十个一维数组
		// 遍历二维数组的每个一维数组
		for(int i = 0; i < yangHui.length; i++) {
 
			// 给每个一维数组(行)开辟空间
			yangHui[i] = new int[i + 1];
			for(int j = 0; j < yangHui[i].length; j++) {
				//每一行的第一个元素和最后一个元素都是1
				if(j == 0 || j == yangHui[i].length - 1) {
					yangHui[i][j] = 1;
				} else {// 不是第一个和最后一个就是中间的
					yangHui[i][j] = yangHui[i - 1][j] + yangHui[ i - 1][j - 1];
				}
			}
		}
 
        // 遍历输出
		for( int i = 0 ; i < yangHui.length ; i++) {
			for(int j = 0 ; j < yangHui[i].length ; j++) {
				System.out.print(yangHui[i][j] + "  ");
			}
			System.out.println();
		}
	}
}

输出结果为:

二、猴子吃桃

有一堆桃子,猴子第一天吃了其中的一半多一个,以后猴子每天都会吃剩下桃子中的一半多一个。到第10天时,猴子正想吃时,发现只有1个桃子了。

问:最初有多少个桃子

思路分析:

1)day = 10, 有一个桃子

2)day = 9, 有(day10 + 1) * 2 = 4 个桃子

3)day = 8, 有(day9 + 1) * 2 = 10 个桃子

4)规律:前一天的桃子 = (后一天的桃子 + 1) * 2 个

代码:

public class MonkeyAndPeach {
	public static void main(String[] args) {
		
		AA a = new AA();
		int number = a.peach(1);
		if(number != 0) {
			System.out.println("最初有" + number + "个桃子");
		}
		
	}
}
 
class AA{
 
	public int peach(int day) {
		if(day == 10) { // 第10天,只有一个桃子
			return 1;
		} else if(day >= 1 && day <= 9) {
			return (peach(day + 1) + 1) * 2;
		} else {
			System.out.println("天数错误,要在 1 - 10 范围内");
			return 0;
		}
	}
}

输出结果为:

三、斐波那契数列

使用递归的方法求出斐波那契数
1,1,2,3,5,8,13……
 输入一个整数n,求出它的值为多少

思路分析:

1)当n = 1时,斐波那契数是1

2)当n = 2时,斐波那契数是1

3)当n > 3时,斐波那契数是前两个数之和

代码:

import java.util.Scanner;
public class RecursionExercise01 {
	public static void main(String[] args) {
		
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入一个整数:");
		int n = myScanner.nextInt();
 
		AA a = new AA();
		int result = a.fibonacci(n);
		if(result != 0) {
			System.out.println("当n=" + n + "时,对应的斐波那契数为:" + result);
		}
		
 
	}
}
 
class AA {
 
	public int fibonacci(int n) {
 
		if(n >= 1) {
			if(n == 1 || n == 2) {
				return 1;
			} else {
				return fibonacci(n - 1) + fibonacci(n - 2);
			}
		} else {
			System.out.println("输入数据不符合标准,n应 >= 1");
			return 0;
		}
		
	}
}

输出结果为:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。