2017第八届蓝桥杯 03 纸牌三角形(java)

本文探讨了使用9张纸牌(A至9)排列成正三角形的问题,要求每条边上的纸牌数字之和相等。通过暴力破解的方式计算不同排法的数量,并考虑旋转与镜像后的相同排法只计一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题:纸牌三角形


A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
下图就是一种排法(如有对齐问题,参看p1.png)。


      A
     9 6
    4   8
   3 7 5 2


这样的排法可能会有很多。


如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?


请你计算并提交该数字。


注意:需要提交的是一个整数,不要提交任何多余内容。


---------------------------


笨笨有话说:
    感觉可以暴力破解哦。
    麻烦的是,对每个排法还要算出它的旋转、镜像排法,看看有没有和历史重复。


歪歪有话说:
    人家又不让你把所有情况都打印出来,只是要算种类数。

    对于每个基本局面,通过旋转、镜像能造出来的新局面数目不是固定的吗?



注意:

题目所提到旋转、镜像后相同的算同一种,因为所用的暴力求解,所以同一个排法,旋转相同的有3种(旋转120°,旋转240°,旋转360°),镜像相同的有2种(左、右)。(镜像我们可以把它理解为心形。。)


思路:

从代码中可以看成(把纸牌三角形看成下面的图形)

a

b c

d e

f g h i


结果:

144


代码如下:

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int cnt=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((a+b+d+f)==(a+c+e+i) && (a+b+d+f)==(f+g+h+i) && (a+c+e+i)==(f+g+h+i)){
													cnt++;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		System.out.println(cnt/3/2);	//旋转3种,镜像2种
	}

}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值