CodeForces 701A Cards

直接看示例输入输出+提示 

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\n",i,j);
26                     break;
27                 }
28             }
29         }
30     }
31     return 0;
32 }

 

posted @ 2016-08-27 21:53  马丁黄瓜啊  阅读(187)  评论(0编辑  收藏  举报