UVA 10344 - 23 out of 5

来源:互联网 发布:easyui 表单插件js 编辑:程序博客网 时间:2024/06/09 15:20

题目大意:给你5个 1 ~ 50 范围内的整数,求能否使这 5 个数经过4次加、减、乘的运算得出 23


解题思路:直接 DFS 查找所有可能的情况,当经过 4 次运算得出 23 就结束查找

#include <cstdio>#include <algorithm>using namespace std;int arr[10], ok;int  dfs(int i, int sum) {if (i == 4 && sum == 23)ok = 1;if (i < 4 && !ok) {dfs(i + 1, sum * arr[i + 1]);dfs(i + 1, sum + arr[i + 1]);dfs(i + 1, sum - arr[i + 1]);}}int main() {while (scanf("%d%d%d%d%d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4]), arr[0]) {sort(arr, arr + 5);ok = 0;do {dfs(0, arr[0]);} while (next_permutation(arr, arr + 5));printf(ok ? "Possible\n" : "Impossible\n");}return 0;}


0 0