4498 指针
作者:
jy9
,
2024-10-14 22:08:51
,
所有人可见
,
阅读 3
二进制枚举做法
#include <iostream>
using namespace std;
const int N = 20;
int n;
int a[N];
bool flag;
int main(){
cin >> n;
for (int i = 0; i < n; i ++ )cin >> a[i];
for(int i = 0; i < (1 << n); i++){
int dg = 0;
for(int j = 0; j < n; j++){
if(i >> j & 1) dg += a[j];
else dg -= a[j];
}
if(abs(dg) % 360 == 0){
flag = 1;
break;
}
}
if(flag) cout << "YES";
else cout << "NO";
return 0;
}
想要能从二进制数字串的最右边一个开始进行枚举,j必须从0开始,意味着第一次会右移一位,以此来判断第一次转动指针,所以a数组也要从0开始,或者给j加一个偏移量
#include <iostream>
using namespace std;
const int N = 20;
int n;
int a[N];
bool flag;
int main(){
cin >> n;
for (int i = 1; i <= n; i ++ )cin >> a[i];
for(int i = 0; i < (1 << n); i++){
int dg = 0;
for(int j = 0; j < n; j++){
if(i >> j & 1) dg += a[j+1];
else dg -= a[j+1];
}
if(abs(dg) % 360 == 0){
flag = 1;
break;
}
}
if(flag) cout << "YES";
else cout << "NO";
return 0;
}
OK,晚安
$ sudo shutdown now