POJ 1007

poj1007

题目是求每个输入字符串的逆序对数,并根据逆序对数对字符串进行从小到大的排序,如果逆序对数相同,则按输入顺序排列

 

很简单,先求逆序对数,再排序就行了

 

下面为java代码:

 1 import java.util.Scanner;
 2 import java.util.Comparator;
 3 import java.util.Arrays;
 4 
 5 public class Main{
 6     public String string;   //字符串
 7     public int num;         //字符串的逆序对数
 8     
 9     public Main(String str){    //构造函数
10         string = str;
11         getMeasures();
12     }
13     
14     public void getMeasures(){ //求逆序对数函数
15         int result = 0;
16         for(int i=0;i<string.length()-1;i++){      //两重循环
17             for(int j=i+1;j<string.length();j++){
18                 if(string.charAt(i)>string.charAt(j)){
19                     result++;
20                 }
21             }
22         }
23         num = result;
24     }
25     public static void main(String[] args){
26         int n,m;
27         Scanner scan = new Scanner(System.in);
28         n = scan.nextInt();
29         m = scan.nextInt();
30         scan.nextLine();
31         Main[] strings = new Main[m];              //Main类数组
32         for(int i = 0;i<m;i++){
33             String s = scan.nextLine();
34             strings[i] = new Main(s);              //输入m个字符串,构造m个Main对象
35         }
36         Arrays.sort(strings,new MyComparator());    //对数组进行排序
37         for(int i=0;i<m;i++){ 
38             System.out.println(strings[i].string);  //打印
39         }
40     }
41 }
42 
43 class MyComparator implements Comparator<Main>{   //比较器,按逆序对数目排列
44     public int compare(Main a,Main b){
45         return a.num - b.num;
46     }
47 }

 

posted @ 2015-05-04 09:58  杨永华  阅读(156)  评论(0编辑  收藏  举报