您的位置:首页 > 其它

纸牌三角形and九宫幻方一些对称数组图形关于旋转和镜像的一些规律总结

2018-03-31 20:27 323 查看
关于 对称图形(数字对称图形) 的旋转和镜像问题的一些理解 这里使用两个列子来说明这个情况①纸牌三角形②九宫幻方



这里可以使用next_permutation 函数 将1-9数组 全排列 求出所有满足情况的解的个数 但是其中包含了 一些旋转和镜像后相同的解 因此需要排除( 使用除法 ) 找出每种解的重复的个数 n 那么问题为如何得到这个n的值 ------- 个人总结的技巧 这里的三角形 如以本题给出的这个解 进行旋转变换 很明显 旋转周期为三 即通过旋转可以得到三种解 进行镜像 就如同在某一侧放置一块镜子 (补充知识点 ;左右镜像的结果是一样的) 可得到 镜像的周期也为3 所以通过镜像可以得到三个解 那么需要的n的值求出为 6 故将全排列后统计满足条件的解的总数 除以6 即为本题的解import java.util.Arrays;

public class Two {
static int cnt = 0;
public static void main(String[] args) {
do {
int sum1 = Arrays[0] + Arrays[1] + Arrays[2] + Arrays[3];
int sum2 = Arrays[3] + Arrays[4] + Arrays[5] + Arrays[6];
int sum3 = Arrays[7] + Arrays[8] + Arrays[6] + Arrays[0];
if (sum1==sum2&&sum2==sum3) {
cnt++;
}
} while (next_permutation(Arrays));
System.out.println(cnt/6);
}
// 方法一 使用 next_permutation
public static void swap(int nums[], int left, int right) {
int t = nums[left];
nums[left] = nums[right];
nums[right] = t;
}
public static void reverse(int nums[], int left, int right) {

while (left < right) {
swap(nums, left++, right--);
}
}
public static boolean next_permutation(int nums[]) {
for (int i = nums.length - 2; i >= 0; i--) {
if (nums[i] < nums[i + 1]) {
for (int j = nums.length - 1; j > i; j--) {
if (nums[j] > nums[i]) {
swap(nums, i, j);
reverse(nums, i + 1, nums.length - 1);
return true;
}
}
}
}
return false;
}
static int Arrays[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
}


标题:九宫幻方




同样 题目已经说明了 所有的解都是通过 题目给出的这个解进行旋转和镜像得到的 所以 根据上题总结的关于旋转和镜像的规律 我们很容易的得到 旋转周期为4 镜像周期为4 即所有可能的解为8 这样可以将这八个解列举出来 这样之后 这道题就比较简单了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥杯 对称 镜像