设答案为r,cnt为x[i] >=0的个数
那么r = 1/n * (Σx[i](x[i] >= 0) + ∑(r - x[i])(x[i] < 0))
然后把r移项到一起解方程, 得到r = ∑|x[i]| / cnt,同除gcd。记得特判下x[i]均为负数的情况即可。
1 #include <cstdio>
2 #include <algorithm>
3 using namespace std;
4 int T,cas,n,tot,gcd,cnt;
5 int x[110];
6 int main()
7 {
8 for (scanf("%d",&T);T != 0;T--)
9 {
10 cas++;
11 tot = cnt = 0;
12 scanf("%d",&n);
13 for (int i = 1;i <= n;i++)
14 {
15 scanf("%d",&x[i]);
16 if (x[i] >= 0)
17 {
18 cnt++;
19 tot += x[i];
20 }else
21 tot -= x[i];
22 }
23 if (cnt == 0)
24 {
25 printf("Case %d: inf\n",cas);
26 continue;
27 }
28 gcd = __gcd(tot,cnt);
29 printf("Case %d: %d/%d\n",cas,tot / gcd,cnt / gcd);
30
31 }
32 return 0;
33 }