求每个字符串的逆序数,
然后根据逆序数进行sorting
刚开始做的太麻烦,耗时太久。后来看别人的代码简化输入,在输入的同时比较字符数组。
最后输出时比较大小是点睛之笔,大大简化了输入。要学会0xffffff这种用法,选出最小值后再将其置为最大值,使得在下一轮比较重不影响结果。
#include<stdio.h> #include<string.h> #define INF 0xffffff int main(void) { int n,m,i,j,k; char dna[101][51]; int num[101]={0}; scanf("%d%d",&n,&m); for(i=0;i<m;i++) { scanf("%s",dna[i]); for(j=0;j<n-1;j++) { if(dna[i][j]=='A') continue; for(k=j+1;k<n;k++) { if(dna[i][j]>dna[i][k]) num[i]++; } } } int p=-1; for(i=0;i<m;i++) { for(j=0;j<m;j++) { if(num[j]<num[p]) {p=j;} } printf("%s\n",dna[p]); num[p]=INF;//将最小的数值置为无穷大 } return 0; }