前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第八届蓝桥杯省赛-软件类-Java类真题 第二题 标题:纸牌三角形

第八届蓝桥杯省赛-软件类-Java类真题 第二题 标题:纸牌三角形

作者头像
静谧星空TEL
发布2022-11-30 14:05:12
2260
发布2022-11-30 14:05:12
举报
文章被收录于专栏:云计算与大数据技术

标题:纸牌三角形

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

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

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

请你计算并提交该数字。

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

代码语言:javascript
复制
package com.gxwz.test;

public class Main  {
	
	static int A[] = {1,2,3,4,5,6,7,8,9};		
	static int N = 9*8*7*6*5*4*3*2*1;			//9位数的全排列一共有 9的阶层 次
	static int B[][] = new int [N][A.length];	//二维数组存储全排列
	static int count = 0;	//全排列次数
	static int sum = 0;	//结果
	public static void main(String[] args) {
		f(0,A.length);
		dfs();
//		outB();
//		System.out.println(count);
		System.out.println(sum/6);
	}
	//交换函数
	public static void swap(int i,int j) {
		int temp = A[i];
		A[i] = A[j];
		A[j] = temp;
	}
	//输出数组A
	public static void outA() {
		for (int i : A) {
			System.out.print(i+" ");
		}System.out.println();
	}
	//输出数组B
	public static void outB() {
		for (int[] is : B) {
			for (int i : is) {
				System.out.print(i+" ");
			}System.out.println();
		}
	}
	//把数组A复制给数组B
	public static void copy() {
		for(int i=0;i<A.length;i++) {
			B[count][i] = A[i];
		}
	}
	//递归,全排列
	public static void f(int start,int end) {
		if(start == end - 1) {
//			outA();
			copy();
//			outB();
			count++;
		}else {
			for(int i=start;i<end;i++) {
				swap(i,start);
				f(start+1,end);
				swap(i,start);
			}
		}
	}
	//校验
	public static void dfs() {
		
		for(int i=0;i<B.length;i++) {
			if(B[i][0]+B[i][1]+B[i][2]+B[i][3] == B[i][3]+B[i][4]+B[i][5]+B[i][6] &&
			B[i][3]+B[i][4]+B[i][5]+B[i][6] == B[i][0]+B[i][6]+B[i][7]+B[i][8]) {
				sum++;
			}
		}
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档