蓝桥杯——历届真题 搭积木 【第七届】【省赛】【C组】

举报
小彭友。 发表于 2022/03/02 17:18:54 2022/03/02
【摘要】 问题说明:小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法:   0  1 2 3 4 56 7 8 9   0  3 1 7 5 29 8 6 4    请你计算这样的搭法一共有多少种?请填表示总数目的数字。注意:你提交的应该是...

问题说明:

小明最近喜欢搭数字积木,
一共有10块积木,每个积木上有一个数字,0~9。

搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。

下面是两种合格的搭法:


   0
  1 2
 3 4 5
6 7 8 9

   0
  3 1
 7 5 2
9 8 6 4    

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

请填表示总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

解题思路:

根据题意可以知道,积木的顶端一定是0,我们只需要把剩余的1-9排列一下,再用一个变量计次就可以了。

   0
  a b
 c d e
f g  h  i

可以参考这个积木来规划代码。

程序代码:

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int count=0;
		for (int a = 1; a <=9; a++) {
			for (int b = 1; b <=9; b++) {
				for (int c = 1; c <=9; c++) {
					for (int d = 1; d <=9; d++) {
						for (int e = 1; e <=9; e++) {
							for (int f = 1; f <=9; f++) {
								for (int g = 1; g <=9; g++) {
									for (int h = 1; h <=9; h++) {
										for (int i = 1; i <=9; i++) {
												if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&
													b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&
													c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&
													d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&
													e!=f&&e!=g&&e!=h&&e!=i&&
													f!=g&&f!=h&&f!=i&&
													g!=h&&g!=i&&
													h!=i) {
													if (c>a&&d>a&&d>b&&e>b&&f>c&&g>c&&g>d&&h>d&&h>e&&i>e) {
														count++;
													}
												}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		
		System.out.println(count);
		
	}

}

代码解析:

因为1-9直接不能重复所以要在for循环之间添加一个if判断来筛选除重复的数字;

然后根据上面规划的积木来写外侧if的判断条件即可。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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