问题描述:
解题思路:
用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;
}
知识点:四舍五入函数,保留后四位,二进制表示状态