传说中的越南小学数学题
来源:互联网 发布:淘宝店铺如何替换图片 编辑:程序博客网 时间:2024/06/09 16:37
前几天在微博上看到这个所谓的神题,然后就想着来算算
http://t.qq.com/p/t/487008033132809/14?&#p=2&select=1&time=1432732148&mid=466699120015199&apiType=14&format=1
全排列算法部分抄自:
http://blog.csdn.net/yangliuy/article/details/7555518
如果假设题目中填入的数字不允许重复,那么只要找到
list[0]+(13*list[1])/list[2]+list[3]+12*list[4]-list[5]-11+(list[6]*list[7])/list[8]-10=66的解即可。
然后难点就在于,如何确定这个list。
我先想到的是类似于四皇后的解法,也就是生成一个矩阵
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2。。。。
然后每列选取一个,然后每一列都不重复即可。。。但是后面突然想到,这事儿没这么复杂,完全可以初始化一个数组
list[]={1,2,3,4,5,6,7,8,9};
然后求这个数组的全排列即可。然后就得到了下面的代码:
#include<iostream>using namespace std;//n用于记录解空间总数int n=0;void swap(int *a, int *b){ int m; m = *a; *a = *b; *b = m; } void perm(int list[], int k, int m) { int i; if(k > m) { int sum=0; //这里是为了排除计算除法时导致的精度丢失的问题,只取能够整除的数据 if((((13*list[1])%list[2])==0)&&((list[6]*list[7])%list[8]==0)) sum=list[0]+(13*list[1])/list[2]+list[3]+12*list[4]-list[5]-11+(list[6]*list[7])/list[8]-10; if(sum==66) { for(i = 0; i <= m; i++) cout<<list[i]<<" "; cout<<endl; n++; } } else { for(i = k; i <= m; i++) { //传说这是全排列的核心,但是我没看懂。。。orz swap(&list[k], &list[i]); perm(list, k + 1, m); swap(&list[k], &list[i]); } } } int main() { int list[] = {1,2,3,4,5,6,7,8,9}; perm(list, 0, 8); cout<<"total: "<<n<<endl; return 0; }
计算结果:
3 2 1 5 4 7 8 9 6
3 2 1 5 4 7 9 8 6
5 2 1 3 4 7 8 9 6
5 2 1 3 4 7 9 8 6
5 3 1 7 2 6 8 9 4
5 3 1 7 2 6 9 8 4
5 4 1 9 2 7 8 3 6
5 4 1 9 2 7 3 8 6
5 9 3 6 2 1 7 8 4
5 9 3 6 2 1 8 7 4
6 3 1 9 2 5 7 8 4
6 3 1 9 2 5 8 7 4
6 9 3 5 2 1 7 8 4
6 9 3 5 2 1 8 7 4
7 3 1 5 2 6 8 9 4
7 3 1 5 2 6 9 8 4
9 3 1 6 2 5 7 8 4
9 3 1 6 2 5 8 7 4
9 4 1 5 2 7 8 3 6
9 4 1 5 2 7 3 8 6
total: 20
Process exited after 3.832 seconds with return value 0
纯新手,欢迎指正^_^
- 传说中的越南小学数学题
- python解越南逆天小学数学题
- 小学数学题
- 越南小学题
- 越南三年级数学题
- 越南小学题的解答
- 小学数学题一道
- 一道小学的数学题
- 小学数学题 洛谷p2921
- 小学数学题,看看现在还会做吗?
- 一道小学数学题[状元蹄]
- 坑爹的小学数学题
- hdoj1049 Climbing Worm(小学数学题)
- 一道小学五年级的数学题
- 一个小学数学题引发的血案
- 一道小学数学题,坑死我了!!!
- URAL 1068. Sum (小学数学题)
- URAL 1567. SMS-spam (小学数学题)
- mysql外键指令总结
- Hadoop yarn配置
- Oracle简介
- scala生成eclipse文件报:Cannot run program "javac": CreateProcess error=2,解决方法
- 这里炒股的人应该很多,对于今天的多说几句吧
- 传说中的越南小学数学题
- 数组的操作符重载
- List::构造、复制构造、析构
- vs2010下配置pthread
- eclipse安装maven插件的步骤
- ice demo中关于#if compact #endif宏解释
- android 代码混淆导致问题,快速定位
- Vi编辑命令
- iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别