首先这个题一定有解
每个数对 n 取模后不会影响最后结果,所以计算 sum [ i ] 表示前 i 个的和,当sum [ i ] 等于0时 说明是 n 的倍数
否则 我们可以知道 所有的 n 个 sum 包括 1 - (n-1) 这 n-1个数,所以一定有两个 sum 是相同的,也就是说他们之间的和满足n的倍数
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 20000 + 7;
int n;
int a[maxn];
int sum[maxn];
int id[maxn];
int main() {
while(~scanf("%d", &n) && n) {
sum[0] = 0;
memset(id, 0, sizeof id);
for(int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for(int i = 1; i <= n; ++i) {
sum[i] = ( sum[i-1] + a[i] ) % n;
if(sum[i] == 0) {
printf("%d\n", i);
for(int j = 1; j <= i; ++j)
printf("%d\n", a[j]);
break;
}
else {
if(id[sum[i]] > 0) {
printf("%d\n", i - id[sum[i]]);
for(int j = id[sum[i]]+1; j <= i; ++j)
printf("%d\n", a[j]);
break;
}
id[sum[i]] = i;
}
}
}
return 0;
}