题意:有8个数字全排列后带入公式计算,选出最小值。

题解:水题。

#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int flag[8][2] = {{-1, -1}, {-1, 0}, {1, 0}, {1, 1}, {0, -1}, {0, 1}, {-1, 1}, {1, -1}};
double arr[8];

int main() {
	while (1) {
		double sum = 0;
		for (int i = 0; i < 8; i++) {
			scanf("%lf", &arr[i]);
			sum += arr[i];
		}
		if (fabs(sum - 0) < 1e-9)
			break;
		sort(arr, arr + 8);
		double minn = 1 << 30;
		do {
			double temp1 = 0, temp2 = 0;
			for (int i = 0; i < 8; i++) {
				temp1 = temp1 + arr[i] * flag[i][0];
				temp2 = temp2 + arr[i] * flag[i][1];
			}
			double temp = sqrt(temp1 * temp1 + temp2 * temp2);
			minn = min(minn, temp);
		} while (next_permutation(arr, arr + 8));
		printf("%.3lf\n", minn);
	}
	return 0;
}