简单题,用数学方法做出来的,有更好的方法,有时间研究。下面贴出代码,以作纪念。
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 }

浙公网安备 33010602011771号