24 Point game(nyoj 43)
来源:互联网 发布:乐乎公寓官网 编辑:程序博客网 时间:2024/05/21 13:57
题目:点击打开链接
这个题写了我好久好久………………样例一直都过不了= =。
24点游戏,给你几个数,看能不能构成24点。
刚看到题,想的就是对数字进行全排列然后再对符号进行全排列,还要特殊处理括号,相当麻烦.
其实这个题用不着全排列所有数字,只要每次在数组中选取两个之前没有运算过的数字进行运算,其中运算包括6种:加,减, 乘,除,被减,被除,将结果存入数组,为避免重复使用数字,要标记那两个数已经用过。m个数经过m - 1次运算就可以得到最后的结果,将最后的结果跟24进行比较,比较的时候要注意精度问题。因为随机的取数进行运算并且运算除了加,减, 乘,除,还有被减,被除,这样就可以枚举所有的组合情况,就不用进行全排列了,感觉还是挺有收获的……
#include <stdio.h>#include <string.h>#include <math.h>int n;double sum, a[10];bool vis[10];int dfs(int m, int top){//m记录运算了几次,top是下一次运算的结果存放的位置if(m == 1){if(fabs(sum - a[top - 1]) < 0.000001)return 1;elsereturn 0;}int i, j;for(i = 0; i < top - 1; i++){if(!vis[i]){//i位置的数没有使用过vis[i] = 1;for(j = i + 1; j < top; j ++){if(!vis[j]){vis[j] = 1;a[top] = a[i] + a[j];if(dfs(m - 1, top + 1))return 1;a[top] = a[i] - a[j];if(dfs(m - 1, top + 1))return 1;a[top] = a[j] - a[i];if(dfs(m - 1, top + 1))return 1;a[top] = a[i] * a[j];if(dfs(m - 1, top + 1))return 1;if(a[i] != 0){a[top] = a[j] / a[i];if(dfs(m - 1, top + 1))return 1;} if(a[j] != 0){a[top] = a[i] / a[j];if(dfs(m - 1, top + 1))return 1;}vis[j] = 0;//注意位置…………} }vis[i] = 0;//注意………}}return 0;}int main (void){int t;scanf("%d", &t);while(t --){memset(vis, 0, sizeof(vis));scanf("%d", &n);scanf("%lf", &sum);int i;for(i = 0; i < n; i++)scanf("%lf", &a[i]);if(dfs(n, n))printf("Yes\n");elseprintf("No\n");}return 0;}
0 0
- Nyoj 43 24 Point game
- NYOJ-43 24 Point game
- 24 Point game(nyoj 43)
- nyoj 43 24 Point game
- NYOJ 43 24 Point game
- nyoj 24 Point game
- nyoj-43 24 Point game (搜索)
- NYOJ-43 24 Point game-DFS
- Nyoj 43 24 Point game 【DFS】
- NYOJ 43--24 Point game【DFS】
- 深搜 nyoj 43 24 Point game
- nyoj 43 24 Point game 【经典DFS】
- nyoj 43 24 Point game 【dfs&&递归】
- NYOJ 43 24 Point game (DFS)
- NYOJ 43 24 Point game(dfs)
- NYOJ 43 —24 Point game
- Nyoj 24 Point game dfs
- nyoj 42 24 Point game
- 蚁群算法解决TSP问题 再续
- android NFC 程序设计
- 析构函数
- 逗B少年搞程序04 装饰模式——又是一波非常规性总结
- LeetCode String to Integer(atoi)
- 24 Point game(nyoj 43)
- OpenCV2.x中的卡尔曼滤波器KalmanFilter类的解剖研究
- 练习写C++代码(1)--实现简单的时钟类1
- Hanoif汉诺塔
- 生成条形码显示到界面
- 初学cocos2dx-3.0之安装篇问题(linux)
- gcc编译器---前端和后端
- HDU 1394 线段树 || 归并排序
- struct2用Action的属性接收参数的方法