枚举——三种解

来源:互联网 发布:张无忌武力 知乎 编辑:程序博客网 时间:2024/06/03 19:38

第一种

因为只有16种,可以快速枚举 用16个if

第二种

利用位运算 的 特殊来枚举
#include <iostream>using namespace std;int main(){    int a[6];    int n;    cin >> n;    while (n --){        for (int i = 1;i <= 5;i ++)            cin >> a[i];        int sum;        int counter = 0;        for (int i = 0;i < (1<<4);i ++){            int now = i;sum = a[1];            for (int j = 2;j <= 5;j ++){                if (now % 2 == 0){                    sum += a[j];                }else sum -= a[j];                now >>= 1;            }            if (sum == 24)counter ++;        }        cout << counter << endl;    }}

第三种

利用背包的原理优化
#include <iostream>using namespace std;int a[7];int ans;void res(int sum,int i){    if (i == 6){        if (sum == 24) ans ++;    }    else {        res(sum + a[i],i + 1);        res(sum - a[i],i + 1);    }}int main(){    int n;    cin >> n;    while (n --){        ans = 0;        for (int i = 1;i <= 5;i ++)            cin >> a[i];        res(a[i],2);        cout << ans << endl;    }    return 0;}

 
原创粉丝点击