如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
public class Main {
static int[] a = { 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 };
static int ans = 0;
public static void main(String[] args) {
f(0, a.length - 1);
// 因为旋转和镜像后相同的都算同一种,所以除以10
System.out.println(ans / 10);
}
public static void f(int start, int end) {
if (start == end) {
if (check())
ans++;
}
for (int i = start; i <= end; i++) {
{
int temp = a[i];
a[i] = a[start];
a[start] = temp;
}
f(start + 1, end);
{
int temp = a[i];
a[i] = a[start];
a[start] = temp;
}
}
}
// 检查是否符合要求
public static boolean check() {
if (a[1] + a[2] + a[3] + a[4] != 24)
return false;
if (a[0] + a[2] + a[5] + a[8] != 24)
return false;
if (a[0] + a[3] + a[6] + a[9] != 24)
return false;
if (a[1] + a[5] + a[7] + a[9] != 24)
return false;
if (a[4] + a[6] + a[7] + a[8] != 24)
return false;
return true;
}
}
以上是《JAVA 蓝桥杯 国赛 第六届 B组 试题 B: 五星填数》的全部内容,
感谢您对程序员阿鑫博客的支持!
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!