zoukankan      html  css  js  c++  java
  • uva 10344 23 out of 5 凑运算结果 全排列+dfs

    五个数三个运算符号,排列之后凑成结果为23,不考虑优先级。

    很水,数据量也不大,先生成五个数的全排列,用dfs找出结果能否为23即可。

    代码:

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    #define RES 23
    
    const int maxn = 5;
    
    int num[maxn]; 
    bool flag;
    
    bool input(void) {
    	for (int i = 0; i < maxn; i++)
    		scanf("%d", &num[i]);
    	if (num[0] || num[1] || num[2] || num[3] || num[4])
    		return true;
    	return false;
    }
    
    void dfs(int res, int d) {
    	if (flag) return;
    	if (d == maxn) {
    	   if (res == RES)
    			flag = true;
    		return;
    	}
    	dfs(res + num[d], d + 1);
    	dfs(res - num[d], d + 1);
    	dfs(res * num[d], d + 1);
    }
    
    int main() {
    	while (input()) {
    		sort (num, num + maxn);
    		flag = false;
    		do {
    			dfs(num[0], 1);
    		} while (!flag && next_permutation(num, num + maxn));
    		if (flag)
    			printf("Possible
    ");
    		else
    			printf("Impossible
    ");
    	}
    	return 0;
    }


  • 相关阅读:
    【C-数据类型 常量 变量】
    【OC简介-类和对象】
    【ios面试总结】
    【OC基础语法考试】
    【C-01关键字】
    UI3
    ui2
    UI
    C++使用shell命令
    字典
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212097.html
Copyright © 2011-2022 走看看