蓝桥杯javaB--五星填数


标题:五星填数

如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。

如图就是恰当的填法。

请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。

请提交表示方案数目的整数,不要填写任何其它内容。

 

 结果:120种

public class 五星填数
{
	static int a[] = {1,2,3,4,5,6,8,9,10,12};
	static int count=0;//记录结果数目
	
	public static void print()//每一种情况
	{
		for(int i:a)
		{
			System.out.print(i+" ");
		}
		System.out.println();
	}
	
	public static void One()//每一种情况
	{
		int sum1 = a[1]+a[2]+a[3]+a[4];
		int sum2 = a[0]+a[2]+a[5]+a[8];
		if(sum1 == sum2)
		{
			int sum3 = a[0]+a[3]+a[6]+a[9];
			int sum4 = a[1]+a[5]+a[7]+a[9];
			int sum5 = a[4]+a[6]+a[7]+a[8];
			if(sum1==sum3&&sum1==sum4&&sum1==sum5)//满足条件
			{
				print();
				count++;
			}
		}
	}
	
	public static void fun(int m)//产生所有结果
	{
		if(m==0)
		{
			//print();
			One();
		}
		else
		{
			int t=0;
			for(int i=0;i<=m;i++)
			{
				t = a[i];
				a[i] = a[m];
				a[m] = t;
				fun(m-1);
				t = a[i];
				a[i] = a[m];
				a[m] = t;
			}
		}
	}
	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		fun(9);
		System.out.print(count);

	}

}

  

posted @ 2020-02-01 11:01  池塘之底  阅读(246)  评论(0编辑  收藏  举报