POJ 1007 Java:DNA Sorting

題目描述:大意是給出一些相同長度的字符串,根據這些字符串的逆序數進行排序,輸出。


分析:定義一個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;
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章