求助,#2、3都不对
查看原帖
求助,#2、3都不对
540333
__xzm__楼主2023/9/12 20:06
#include <bits/stdc++.h>

using namespace std;

int a[12], c[12], cnt;
bool mark[12];

bool ck(int i, int j, int k) {
	if (c[i] > c[j] && c[i] > c[k] && a[j] == a[k] && a[j] != a[i]) return true;
	if (c[j] > c[i] && c[k] > c[k] && a[i] == a[k] && a[i] != a[j]) return true;
	if (c[k] > c[i] && c[k] > c[j] && a[i] == a[j] && a[i] != a[k]) return true;
	return false;
}

void dfs(int dep) {
	if (dep == 10) {
		int t = 1;
		if (ck(1, 2, 3)) t = 0;
		if (ck(4, 5, 6)) t = 0;
		if (ck(7, 8, 9)) t = 0;
		if (ck(1, 4, 7)) t = 0;
		if (ck(2, 5, 8)) t = 0;
		if (ck(3, 6, 9)) t = 0;
		if (ck(1, 5, 9)) t = 0;
		if (ck(3, 5, 7)) t = 0;
		cnt += t;
		return;
	}
	
	for (int i = 1; i <= 9; i++) {
		if (!mark[i]) {
			mark[i] = true;
			c[dep] = i;
			dfs(dep+1);
			mark[i] = false;
		}
	}
}

int main() {
	int k = 1;
	for (int i = 1; i <= 9; i++) {
		scanf("%d", &a[i]);
		k *= i;
	}
	dfs(1);
	printf("%.10lf\n", 1.0*cnt/k);
	
	return 0;
}
2023/9/12 20:06
加载中...