版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16554583/article/details/85859150
原题链接:传送门
给你n个数,问你经过加或减的操作,最后和是否能整除360。
二进制枚举
#include <bits/stdc++.h>
using namespace std;
const int N = 20;
int a[N];
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<1<<n;i++){
int s = 0;
for(int j=0;j<n;j++){
if(i & (1<<j))
s += a[j];
else s -= a[j];
}
if(s % 360 == 0)
return puts("YES"),0;
}
puts("NO");
return 0;
}
搜索
#include <bits/stdc++.h>
using namespace std;
const int N = 20;
int n;
int a[N];
int fun(int i,int sum){
if(i == n){
return (sum%360==0);
}
return fun(i+1,sum+a[i]) || fun(i+1,sum-a[i]);
}
int main(){
scanf("%d",&n);
int sum = 0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
if(fun(0,0)) puts("YES");
else puts("NO");
return 0;
}