View Code of Problem 126

#include <stdio.h>
#include <string.h>

int main(){
	int n,m,len,temp;
	//输入1:2个整数,0<n<=50,0<m<=100
	while(scanf("%d %d", &n, &m)!=EOF){
		char strs[m+1][n+1],str[n];
		int tags[m+1];
		for(int i=0; i<m; i++) tags[i]=0;
		for(int i=0; i<m; i++){
			//输入2:m个字符串
			scanf("%s", strs[i]);
			len = strlen(strs[i]);
			//处理1:计算逆序数,存入数组 
			for(int j=0; j<len; j++){
				for(int k=j+1; k<len; k++){
					if(strs[i][j]>strs[i][k]){
						tags[i]+=1;
					}
				}
			}
		}
		//处理2:根据逆序数从小到大排序
//		for(int i=0; i<m-1; i++){
//			int min=i;
//			for(int j=i+1; j<m; j++){
//				if(tags[min]>tags[j]) min=j;
//			}
//			if(min!=i){
//				temp = tags[min];
//				tags[min] = tags[i];
//				tags[i] = temp;
//				strcpy(str, strs[min]);
//				strcpy(strs[min], strs[i]);
//				strcpy(strs[i], str);
//			}
//			
//		}
		//输出:m个字符串,根据逆序数从小到大输出字符串 
		for(int i=0; i<m; i++){
			int min=0;
			for(int j=0; j<m; j++){
				if(tags[min]>tags[j]) min=j;
			}
			printf("%s\n", strs[min]);
			tags[min]=100000;
		}
	}
	
}

Double click to view unformatted code.


Back to problem 126