给定一个长度为 的字符串,其中每个字符都是一个十六进制数位。例如,字符串 016A 表示十进制下的四个数 。
现在请选择 个( 是你选定的数)切分位置 ,其中 ,且 。再令 ,。
对于每个 ,计算第 个数到第 个数的平均值,记作 。你的目标是使 中最大值与最小值之差尽可能小,并输出这个最小值。
其中 。输入字符串中的字符只可能是 0—9 或 A—F。本题假定字符采用 ASCII 编码。输出答案时保留小数点后 6 位。
以下程序通过递归枚举所有可能的连续分段方案。请补全程序。
#include <algorithm>#include <iomanip>#include <iostream> using namespace std; constexpr int N = 25; int n, a[N];char s[N]; double ans = 1e100; int value(char c) { return /* ① */; } void split(int l, int cnt, double mnb, double mxb) { if (l > n) { if (cnt == 0) return; ans = min(ans, mxb - mnb); return; } int sum = 0; for (/* ② */) { sum += a[r]; double nwb = /* ③ */; split(/* ④ */); }} int main() { cin >> n >> s + 1; for (int i = 1; i <= n; ++i) a[i] = value(s[i]); split(/* ⑤ */); cout << fixed << setprecision(6) << ans;①处应填( )。
②处应填( )。
③处应填( )。
④处应填( )。
⑤处应填( )。