纸牌三角形and九宫幻方一些对称数组图形关于旋转和镜像的一些规律总结
2018-03-31 20:27
323 查看
关于 对称图形(数字对称图形) 的旋转和镜像问题的一些理解 这里使用两个列子来说明这个情况①纸牌三角形②九宫幻方
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/14/1b6192ae33ccd2f7c61e3e65f65522f3)
这里可以使用next_permutation 函数 将1-9数组 全排列 求出所有满足情况的解的个数 但是其中包含了 一些旋转和镜像后相同的解 因此需要排除( 使用除法 ) 找出每种解的重复的个数 n 那么问题为如何得到这个n的值 ------- 个人总结的技巧 这里的三角形 如以本题给出的这个解 进行旋转变换 很明显 旋转周期为三 即通过旋转可以得到三种解 进行镜像 就如同在某一侧放置一块镜子 (补充知识点 ;左右镜像的结果是一样的) 可得到 镜像的周期也为3 所以通过镜像可以得到三个解 那么需要的n的值求出为 6 故将全排列后统计满足条件的解的总数 除以6 即为本题的解import java.util.Arrays;
标题:九宫幻方
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/14/1860181390cfbaa4b9d2b4f418e033a3)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/14/17d03cc9ae1124293720fec74263aa19)
同样 题目已经说明了 所有的解都是通过 题目给出的这个解进行旋转和镜像得到的 所以 根据上题总结的关于旋转和镜像的规律 我们很容易的得到 旋转周期为4 镜像周期为4 即所有可能的解为8 这样可以将这八个解列举出来 这样之后 这道题就比较简单了
这里可以使用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 这样可以将这八个解列举出来 这样之后 这道题就比较简单了
相关文章推荐
- EMF的一些总结(1)——关于Packages and Factories
- C/C++的一些关于字符数组和指针的小总结
- 关于javascript数组的定义与其一些常用方法总结
- [转载]关于StretchDIBits生成镜像图像的一些总结
- 关于数组的一些总结
- Challenge2关于数据分析的图形的一些总结
- 关于旋转屏幕的一些总结
- 关于sizeof和内存对齐的一些知识总结(zz)
- 关于iOS App 国际化和本地化 的一些总结:国际化 vs 本地化(Internationalization vs Localization)
- 关于servlet的一些总结
- 关于基本勾股数规律的探讨总结与例题!
- 关于数组的一些知识点和API
- 关于es6的一些常用关键字以及set与数组的操作
- Struts2中关于"There is no Action mapped for namespace / and action name"的总结
- 关于字符串,数组,对象的一些小方法
- 关于C++中的虚拟继承的一些总结
- 数组、字符串在指针和函数中的一些经验总结
- 关于struts2传值方式的一些学习总结
- 黑马程序员-关于反射的一些小总结
- 关于struts2的一些总结