乙個序列的逆序數定義為序列中無序元素對的數目。例如,在字串行daabec中,逆序數為5,因為字元d比它右邊的4個字元大,而字元e比它右邊的1個字元大。字串行aacedgg只有1個逆序,即e和d,它幾乎是已經排好序的,而字串行「zwqm」有6個逆序,它是最大程度的無序,即有序序列的逆序。
在本題中,你的任務是對dna字串(只包含字元「a」、「c」,「g」和「t」)進行排序。注意不是按照字母順序,而是按照逆序數從低到高進行排序,所有字串的長度都一樣。
輸入檔案中包含多組測試資料。每組測試資料的格式為:第1行為2個整數,正整數n(0 < n <= 50,表示字串的長度)和正整數m(1 < m <= 100,表示字串的數目);然後是m行,每一行為乙個字串,長度為n。
對應到輸入檔案中的n組測試資料,輸出也有n組,每2組輸出之間有乙個空行。對每組輸入資料,按逆序數從低到高輸出各字串,如果2個字串的逆序數一行,則按輸入時的先後順序輸出。
10 5
ttttggccaa
tttggccaaa
gatcagattt
cccgggggga
atcgatgcat
cccgggggga
gatcagattt
atcgatgcat
ttttggccaa
tttggccaaa
思路:
首先構造結構體,結構體裡面有①儲存字串的陣列,②求解字串逆序數的函式,③求字串長度的函式(求逆序數的函式要用到字串長度)。
通過每個字串的逆序數對結構體陣列的排序,用到qsort()函式。(自定義cmp比較函式)
qsort(陣列首位址,陣列長度,陣列元素位元組大小,指向比較函式的指標)
#include
using
namespace std;
struct charlist
return pos -1;
}//求解字串逆序數的函式
intantinum()
}}return result;}}
;//自定義比較函式
intcmp
(const
void
*a,const
void
*b)//定義結構體陣列
charlist dna[20]
;int
main()
qsort
(dna, n,
sizeof
(dna[0]
), cmp)
;for
(int i =
0; i < m; i++
)return0;
}
C語言描述 DNA
小強從小就喜歡生命科學,他總是好奇花草鳥獸從 來的。終於,小強上中學了,接觸到了神聖的名詞 dna.它有乙個雙螺旋的結構。這讓一根筋的小強抓破頭皮,要是能畫出來就好了 小強喊道。現在就請你幫助他吧 輸入包含多組測試資料。第乙個整數n n 15 n表示組數,每組資料報含兩個整數a,b。a表示乙個單位的...
百練1007 DNA排序
總時間限制 1000ms 記憶體限制 65536kb 描述 現在有一些長度相等的dna串 只由acgt四個字母組成 請將它們按照逆序對的數量多少排序。逆序對指的是字串a中的兩個字元a i a j 具有i j 且 a i a j 的性質。如字串 atcg 中,t和c是乙個逆序對,t和g是另乙個逆序對,...
排序 C 實現
快速排序 兩個哨兵i和j,i從左往右找大於key的值,j從右往左找小於key的值,找到之後交換。迴圈之後還有一次交換 void quicksort vector a,int left,int right swap a,j,left quicksort a,left,j 1 quicksort a,j...