直接看示例输入输出+提示
1. 统计所有数的和 sum,然后求 sum/(n/2) 的到一半数的平均值
6
1 5 7 4 4 3 -》1+5+7+4+4+3=24 分成3组 每组值为8
int sumavg=sum/(n/2)=8
2. int z=sumavg-x[i]
if(x[j]==z&&!dp[i]&&!dp[j]) //如果当前数为该输出的数,且i,j没有输出过,则输出 i,j (数组下标), 且dp[i]=dp[j]=1;
AC代码可以解释解题答案
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int n,i,x[102],dp[102]; 6 while(scanf("%d",&n)!=EOF) 7 { 8 int sumavg=0; 9 for(i=1; i<=n; i++) 10 { 11 scanf("%d",&x[i]); 12 sumavg+=x[i]; 13 } 14 sumavg=sumavg/(n/2); 15 memset(dp,0,sizeof(dp)); 16 for(int i=1; i<n; i++) 17 { 18 int z=sumavg-x[i]; 19 for(int j=i+1; j<=n; j++) 20 { 21 if(x[j]==z&&!dp[i]&&!dp[j]) 22 { 23 dp[i]=1; 24 dp[j]=1; 25 printf("%d %d ",i,j); 26 break; 27 } 28 } 29 } 30 } 31 return 0; 32 }