Java实现搭积木_Java搭积木游戏

【题目】

小明最近喜欢搭数字积木,

一共有10块积木,每个积木上有一个数字,0~9。

搭积木规则:

每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。

最后搭成4层的金字塔形,必须用完所有的积木

下面是两种合格的搭法:

0 0

1 2 3 1

3 4 5 7 5 2

6 7 8 9 9 8 6 4

请你计算这样的搭法一共有多少种?

【分析】

首先可以用一个一维数组来表示这个积木

{0,1,2,3,4,5,6,7,8,9},这样正好数组0下标是0,一一对照

然后需要两个方法:

runOne()方法:来为我们找出所有可能的情况

runTwo()方法:每找出一种可能,就调用该方法来判断是否符合搭积木条件

【代码演示】

public class Main {

// 静态数组

static int[] num = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

// 计数君

static int count = 0;

// 主方法在这

public static void main(String[] args) {

runOne(0);

System.out.println(count);

}

static void runOne(int n){

// n为置换到第几个积木了,到第9块积木才能判断

if (n==9){

runTwo();

}

for (int i=n;i<10;i++){

// 当程序第一次到这里的时候,这里把i下标与n下标调换位置还是不变的

// 这里的是给后面已经置换过位置的再次置换回来

int inputOne=num[i];num[i]=num[n];num[n]=inputOne;

runOne(n+1);

// 这里是当楼上方法执行完毕就会执行下标位置调换

int inputTwo=num[i];num[i]=num[n];num[n]=inputTwo;

}

}

static void runTwo(){

// 这里是只有当这些条件都满足就能count++,不然只能停止该方法

if (num[0]>num[1] || num[0]>num[2]) return;

if (num[1]>num[3] || num[1]>num[4]) return;

if (num[2]>num[4] || num[2]>num[5]) return;

if (num[3]>num[6] || num[3]>num[7]) return;

if (num[4]>num[7] || num[4]>num[8]) return;

if (num[5]>num[8] || num[5]>num[9]) return;

count++;

}

}

【再次分析】

方法runOne()中,有两次调换数组位置,中间夹了一个方法调用,第一次调换位置换不了首次进来的数组,是当runOne(n+1)执行完步后,这时i等于原来的n,n就等于n+1了,这时调换位置就生效了,生效之后当再次遇到第一次调换,就能换回上次的位置,再找一个别的可能的情况

【答案】:768

标签:runOne,return,游戏,积木,int,num,搭积木,static,Java

来源: https://blog.csdn.net/our1624204500/article/details/106809347

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值