这道题有几个关键的地方: 1、计算一个数组的逆序对的个数。 我采用遍历的方式,用两重循环,时间复杂度O(N^2),应该没有效率更高的方法【代码27-32】; 2、找到一对(d[j],d[k],设j2 int main(void) 3 { 4 char data[120]; 5 int len = 0; 6 int d[50]; 7 int j =0,k=0,l =0,i=0; 8 int cnt =0,max =0,x=0,y=0,n=0; 9 while(gets(data))10 {11 len = 0;12 i =0;13 j = 0;14 cnt =0,max =0;;15 n=0;16 //operate input17 while(data[i]!='\0')18 {19 if(data[i]!=',')20 {21 d[j++] = data[i]-'0';22 len++;23 }24 i++;25 }26 //count orignal reversion pairs27 for(j=0;j d[k])31 cnt++;32 }33 //FIND the right pair which can largest reduce the count34 for(j=0;j d[j])40 continue;41 for(l=j;l d[j])44 n--;45 if(d[l] d[k])48 n++;49 if(d[l] max)53 max = n;54 }55 }56 57 printf("%d\n",cnt-max);58 59 }60 return 0;61 } 最后声明下,作为菜鸟一个,没有在给定时间里,完整的把代码中的几个条件考虑进去,因此这里的程序不知道是否可以AC,但是我跑些case的结果是对的。