简单题,用数学方法做出来的,有更好的方法,有时间研究。下面贴出代码,以作纪念。

View Code
 1 /*{
 2 ID:jzy3209981
 3 PROG:sort3
 4 LANG:C++
 5 }*/
 6 #include<stdio.h>
 7 #include<iostream>
 8 #include<string.h>
 9 #include<math.h>
10 using namespace std;
11 int num[1000];
12 int sign[3][2];
13 
14 int main()
15 {
16     freopen ("sort3.in","r",stdin);
17     freopen ("sort3.out","w",stdout);
18     int n,i,a=0,b=0,c=0,number=0,min;
19     scanf("%d",&n);
20     for(i=0;i<n;i++)
21     {
22         scanf("%d",&num[i]);
23         if(num[i]==1)
24             a++;
25         else if(num[i]==2)
26             b++;
27         else
28             c++;
29     }
30     for(i=0;i<a;i++)
31     {
32         if(num[i]==2)
33             sign[0][0]++;
34         else if(num[i]==3)
35             sign[0][1]++;
36     }
37     for(i=a;i<a+b;i++)
38     {
39         if(num[i]==1)
40             sign[1][0]++;
41         else if(num[i]==3)
42             sign[1][1]++;
43     }
44     for(i=a+b;i<n;i++)
45     {
46         if(num[i]==1)
47             sign[2][0]++;
48         else if(num[i]==2)
49             sign[2][1]++;
50     }
51     min=sign[0][0]<sign[1][0]?sign[0][0]:sign[1][0];
52     number+=min;
53     min=sign[0][1]<sign[2][0]?sign[0][1]:sign[2][0];
54     number+=min;
55     min=sign[1][1]<sign[2][1]?sign[1][1]:sign[2][1];
56     number+=min;
57     min=sign[0][0]>sign[1][0]?(sign[0][0]-sign[1][0])*2:(sign[1][0]-sign[0][0])*2;
58     number+=min;
59     printf("%d\n",number);
60     return 0;
61 }

 

posted on 2012-07-20 16:47  醉春雨  阅读(159)  评论(0)    收藏  举报