问题描述:
解题思路:
用n位二进制数每位来表示每一步的状态,2的n次幂即使全部可能。遍历计算全部符合题意总数,再用cnt/(2的n次幂)即答案。
需要注意的是,四舍五入后四位的方法:round(),可以四舍五入保留到整数位,先乘1e4四舍五入计算结果再除1e4,就是四舍五入后四位的结果。但后四位可能为0不显示,因此需要保留后四位,用cout << fixed << setprecision(4) << x;
题解:
#include <bits/stdc++.h>
using namespace std;
const int N = 20;
int a[N];
int main()
{
int n;cin >> n;
int sum = 1 << n;
for(int i = 0; i < n; i++)cin >> a[i];
int cnt = 0;
for(int i = 0; i <= (1 << n) - 1; i++)
{
int now = 0;
for(int j = 0; j < n; j++)
{
if(i & (1 << j))now += a[j];
else now -= a[j];
}
if(now % 7 == 0)cnt++;
}
// 整形转化为double并四舍五入保留后四位***<用这个>
double ans = round((double)cnt / sum * pow(10, 4)) / pow(10, 4); // round函数:小数四舍五入精确到整数位。所以需要乘以1e4满足题目条件
cout << fixed << setprecision(4) << ans << '\n'; // 因为有可能把小数点后的零漏掉,需要保留后4位,fixed表示是小数,setprecision(4)保留几位
return 0;
}
知识点:四舍五入函数,保留后四位,二进制表示状态