題目描述:大意是給出一些相同長度的字符串,根據這些字符串的逆序數進行排序,輸出。
分析:定義一個DNA類,其中包含字符串和該字符串的逆序數兩個成員變量,和相關成員函數。對給定的字符串排序,再輸出。
AC代碼:
import java.util.*;
public class POJ1007 {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int length = s.nextInt();
int num = s.nextInt();
DNA[] dna = new DNA[num];
s.nextLine();//用於跳過換行符
for(int i=0; i<num; i++){
dna[i] = new DNA(s.nextLine());
}
sort(dna);
for(int i=0; i<num; i++){
System.out.println(dna[i].str);
}
s.close();
}
//排序
public static void sort(DNA[] dna){
DNA tmp = new DNA();
for(int i=0; i<dna.length; i++){
for(int j=1; j<dna.length-i; j++){
if(dna[j-1].compare(dna[j])){
tmp.set(dna[j]);
dna[j].set(dna[j-1]);
dna[j-1].set(tmp);
}
}
}
}
}
class DNA{
String str;
int inversion = 0;
DNA(){
this.str = null;
}
DNA(String str){
this.str = str;
//計算出每個DNA的逆序數
count();
}
public void count(){
char ch[] = str.toCharArray();
for(int i=0; i<str.length(); i++){
for(int j=i+1; j<str.length(); j++){
if(ch[i] > ch[j])
inversion++;
}
}
}
public boolean compare(DNA dna){
if(this.inversion >= dna.inversion){
return true;
}
else return false;
}
public void set(DNA d){
this.str = d.str;
this.inversion = d.inversion;
}
}