2019-08-09

環(huán)狀序列(紫書例題3-6)

問(wèn)題描述:
長(zhǎng)度為n的環(huán)狀串有n種表示法捂人,分別為某個(gè)位置開始順時(shí)針得到扒接。CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在這些表示法中,字典序最小的稱為“最小表示”疾嗅。輸入一個(gè)長(zhǎng)度為n(n<=100)的環(huán)狀DNA串(只包含A镣隶、C绷耍、G奇钞、T這4種字符)的一種表示法,你的任務(wù)是輸出該環(huán)狀串的最小表示熬尺。例如摸屠,CTCC的最小表示是CCCT,CGAGTCAGCT的最小表示為AGCTCGAGTC。


image.png

樣例輸入:
2
CGAGTCAGCT
CTCC

樣例輸出:
AGCTCGAGTC
CCCT

分析:

一開始理解這道題的時(shí)候很吃力粱哼,看了好久都不知道它想要干嘛季二,后面才知道原來(lái)是在一串成環(huán)的 DNA像字典排序一樣找出其中最小的表示,也就是要按照字母排列尋找正確的起點(diǎn)揭措。

難點(diǎn):

1.當(dāng)找到的起點(diǎn)并非是輸入的DNA序列的第一個(gè)字母戒傻,怎么讓“斷掉“”的重新“續(xù)上”:
(起點(diǎn)s+增值i)%輸入DNA的長(zhǎng)度

2.當(dāng)符合/不符合時(shí),應(yīng)怎么遞增繼續(xù)判斷/切換起點(diǎn):
符合時(shí)蜂筹,記錄當(dāng)前i的值作為起點(diǎn),用此起點(diǎn)繼續(xù)跟該點(diǎn)以后做起點(diǎn)的序列作比較芦倒;不符合時(shí)艺挪,直接跳過(guò);直到到達(dá)該DNA的結(jié)尾兵扬。

判斷以不同起點(diǎn)的序列的字典序麻裳,從起點(diǎn)開始比較,當(dāng)增加相同單位處的字母不同時(shí)器钟,字母小的序列就小津坑,相同時(shí)繼續(xù)判斷兩序列的下一個(gè)位置字母的大小關(guān)系,直到回到原起點(diǎn)傲霸。

代碼如下:
#include<iostream>
#include<string> 
using namespace std; 
int comp(string s,int s1,int s2){
    int num=s.size();
    for(int i=0;i<num;i++){
        if(s[(s1+i)%num]!=s[(s2+i)%num])
        return s[(s1+i)%num]>s[(s2+i)%num];
    }
    return 0;
}
int main(){
    int n;
    string dna;
    cin>>n;
    while(n--){
        cin>>dna;
        int start=0,num=dna.size();
        for(int i=1;i<num;i++){
            if(comp(dna,start,i))start=i;
        } 
        for(int i=0;i<num;i++){
            cout<<dna[(start+i)%num];
        }
        cout<<endl;
    } 
} 
運(yùn)行截圖

相似的疆瑰,還有:

DNA序列(紫書習(xí)題3-7)

題目描述:

輸入m個(gè)長(zhǎng)度均為n的DNA序列,求一個(gè)DNA序列昙啄,到所有序列的總Hamming距離盡量小穆役。兩個(gè)等長(zhǎng)字符串的Hamming距離等于字符不同的位置個(gè)數(shù),例如梳凛,ACGT和GCGA的Hamming距離為2(左數(shù)第1,4字符不同)耿币。
輸入整數(shù)m和n(4<=m<=50,4<=n<=1000),以及m個(gè)長(zhǎng)度為n的DNA序列(只是包含字母A,C,G,T),輸出到m個(gè)序列的Hamming距離和最小的DNA序列和對(duì)應(yīng)的距離韧拒。如有多解淹接,要求為字典序最小的解十性。例如,對(duì)于下面5個(gè)DNA序列塑悼,最優(yōu)解為TAAGATAC劲适。


image.png
分析:

在上面那題對(duì)字典序有了了解以后,理解這道題就很簡(jiǎn)單了拢肆。所謂Hamming距離和最小意思就是跟所給出的所有序列的字符不同的位置個(gè)數(shù)總和最小减响,直接尋找在所有序列相同位置中出現(xiàn)次數(shù)最多的字符就可以找出這個(gè)序列了。又由于規(guī)定了多個(gè)解的時(shí)候郭怪,題目要求字典序最小支示,因此判斷時(shí)可以用if-else結(jié)構(gòu)按照字典順序進(jìn)行判斷。

代碼如下:

#include<iostream>
#include<string>
using namespace std;
int main(){
    int m,n,max,a,c,g,t;
    string dna;
    cin>>m>>n;
    char str[m][n];
    for(int i=0;i<m;++i){
        cin>>str[i];
    } 
    for(int i=0;i<n;++i){
        a=c=t=g=0;
        for(int j=0;j<m;++j){
            if(str[j][i]=='A')a++;
            else if(str[j][i]=='C')c++;
            else if(str[j][i]=='G')g++;
            else t++;
        }
        max=a;
        if(c>max)max=c;
        if(g>max)max=g;
        if(t>max)max=t;
        
        if(max==a)dna+='A';
        else if(max==c)dna+='C';
        else if(max==g)dna+='G';
        else if(max==t)dna+='T';
    }
    cout<<"\n"<<dna<<endl; 
}
運(yùn)行截圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鄙才,一起剝皮案震驚了整個(gè)濱河市颂鸿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攒庵,老刑警劉巖嘴纺,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異浓冒,居然都是意外死亡栽渴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門稳懒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)闲擦,“玉大人,你說(shuō)我怎么就攤上這事场梆∈洌” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵或油,是天一觀的道長(zhǎng)寞忿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)顶岸,這世上最難降的妖魔是什么腔彰? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮辖佣,結(jié)果婚禮上萍桌,老公的妹妹穿的比我還像新娘。我一直安慰自己凌简,他們只是感情好上炎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般藕施。 火紅的嫁衣襯著肌膚如雪寇损。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天裳食,我揣著相機(jī)與錄音矛市,去河邊找鬼。 笑死诲祸,一個(gè)胖子當(dāng)著我的面吹牛浊吏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播救氯,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼找田,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了着憨?” 一聲冷哼從身側(cè)響起墩衙,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甲抖,沒(méi)想到半個(gè)月后漆改,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡准谚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年挫剑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柱衔。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡樊破,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秀存,到底是詐尸還是另有隱情,我是刑警寧澤羽氮,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布或链,位于F島的核電站,受9級(jí)特大地震影響档押,放射性物質(zhì)發(fā)生泄漏澳盐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一令宿、第九天 我趴在偏房一處隱蔽的房頂上張望叼耙。 院中可真熱鬧,春花似錦粒没、人聲如沸筛婉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)爽撒。三九已至入蛆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硕勿,已是汗流浹背哨毁。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留源武,地道東北人扼褪。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像粱栖,于是被迫代替她去往敵國(guó)和親话浇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容