poj1007 DNA排序

題目大概意思:給出一系列DNA字母串(高中生物知識可知僅含ACTG四個字母),以逆序數作爲評判標準,從好到壞排序。那什麼是逆序數?舉個例子“ACG”,從左往右任何一個字母均比之前的大,故無逆序,逆序數爲0。又比如在單詞序列“DAABEC'”中,因爲D大於右邊四個單詞,E大於C,所以計算結果爲5。
輸入:第一行包含兩個數:一個正整數n0 < n <= 50,字符串長度)一個正整數m(0 < m <= 100,字符串數量),接下來m行爲具體字符串

輸出:輸出輸入字符串列表,按排序程度從好到差。如果逆序數相同,就原來順序輸出。

//
//  main.cpp
//  T1007
//
//  Created by 小哲 on 16/9/28.
//  Copyright © 2016年 小哲. All rights reserved.
//

#include <iostream>
using namespace std;


struct  DNAStruct
{
    char *dna;
    int value;
};
int l,n;
DNAStruct dnaArray[100];

DNAStruct GetValue(char *ch)
{
    int a=0;
    int c=0;
    int g=0;
    DNAStruct d;
    d.dna=ch;
    d.value=0;
    for (int i=l-1; i>=0; i--) {
        switch (ch[i]) {
            case 'A':
                a++;
                break;
            case 'C':
                c++;
                d.value=d.value+a;
                break;
            case 'G':
                g++;
                d.value=d.value+a+c;
                break;
            case 'T':
                d.value=d.value+a+c+g;
                break;
            default:
                break;
        }
    }
    return d;
}

void BSort()
{
    bool flag;
    for (int i=0; i<n-1; i++) {
        flag=true;
        for (int j=n-1;j>i ; j--) {
            if (dnaArray[j].value<dnaArray[j-1].value) {
                DNAStruct temp=dnaArray[j-1];
                dnaArray[j-1]=dnaArray[j];
                dnaArray[j]=temp;
                flag=false;
            }
        }
        if (flag) {
            break;
        }
    }
}


int main() {
    cin>>l>>n;
    for (int k=0; k<n; k++) {
        char *ch=new char[l];
        cin>>ch;
        dnaArray[k]=GetValue(ch);
    }
    BSort();
    for (int i=0; i<n; i++) {
        cout<<dnaArray[i].dna<<endl;
    }
    return 0;
}



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