纸牌三角形
此题实在是没什么好的想法,只好强行暴力遍历了。。希望有大佬能提供更加简洁的思路
我的想法是。。将三个顶点按从大到小顺序排列遍历次序,在顶点顺序固定的情况下就不可能存在镜像和反转了。然后再将除顶点外的点依次不重复地遍历。。
JAVA17_2.java
class CardDelta{
int top=1;
int left=3;
int right=2;
/*
A
9 6
4 8
3 7 5 2
* */
public CardDelta() {
}
public void sort3Num() {
for(int i = 1; i < 8; i++) {
for(int j = i+1; j < 9; j++) {
for(int k = j+1; k < 10; k++) {
//System.out.println(""+i+j+k);
//在此循环中确定三个定点的值,然后将其传入一个函数中
//在函数中遍历所有节点情况
runOver(i, j, k);
}
}
}
}
public void runOver(int top, int left, int right) {
int l1, l2, r1, r2, t1, t2;
int tag=0;
for(l1 = 1; l1 < 10; l1++) {
if(l1!=top && l1!=left && l1!=right) {
for(l2=1; l2<10; l2++) {
if (l2==l1 || (l2==top || l2==left || l2==right)) {
continue;
}
for(r1=1; r1 < 10; r1++) {
if (r1==l1 || r1==l2 || (r1==top || r1==left || r1==right)) {
continue;
}
for(r2=1; r2 < 10; r2++) {
if (r2==r1 || r2==l1 || r2==l2 || (r2==top || r2==left || r2==right)) {
continue;
}
for(t1=1; t1 < 10; t1++) {
if (t1==r1 || t1==l1 || t1==l2 || (t1==top || t1==left || t1==right)) {
continue;
}
for(t2=1; t2 < 10; t2++) {
if (t2==r1 || t2==l1 || t2==l2 || (t2==top || t2==left || t2==right)) {
continue;
}
if(left+l1+l2+top == top+r1+r2+right && top+r1+r2+right == left+t1+t2+right) {
tag++;
System.out.println("left:"+left+l1+l2+top+"\nright:"+top+r1+r2+right+"\ndown:"+left+t1+t2+right);
}
}
}
}
}
}
}
}
System.out.println(tag);
}
}
public class JAVA17_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
CardDelta cDelta = new CardDelta();
cDelta.sort3Num();
}
}
运行结果
目测似乎没有问题,并不知道正确答案,有错误的话欢迎指正。