算典03 習題 07

2021-07-27 03:23:09 字數 1159 閱讀 9345

給出一組dna序列(即一些字串),找出與每個dna序列的差最小的dna序列

差的意思是序列中位置相同但字元不同的位置的個數

輸出這個dna序列以及最小的差

1.準備

這裡有乙個小技巧,dna只有「atcg」四種,要統計這四種出現的次數,就需要一種對應關係,如讓atcg分別對應0123,那麼我就可能用a[0]表示a的出現次數

char n = ;

int nid(char c) //n[nid(c)];

我這裡還是一如既往地使用常量表來很簡便地建立這種對應關係,然後用乙個查詢函式,使其可以通過字元找到下標,如上面的**,n[nid(「a」)]就可以表示a的次數,這樣就方便多了

2.實現

有了上一步的準備,**就很顯而易見了,這裡我對所有的dna一起統計某一位,這一位上出現最多的字元就是結果在這一位的字元,而差就用總的dna數減去其出現的次數即可(每一位都這樣處理)

#include 

#include

#include

using

namespace

std;

const

int maxn = 1e3 +5;

#define met(a,b) memset(a, b, sizeof(a));

char n = ;

int nid(char c) //n[nid(c)];

int m, n, res;

char s[maxn][maxn];

int ans[maxn][4];

char solve(int id)

}res += n - max;

return n[id];

}int main()

met(ans, 0);

for(int i = 0; i < m; ++i)

}res = 0;

for(int i = 0; i < m; ++i)

printf("\n%d\n", res);

}return

0;}

算典03 習題 06

有一張圖上,有黑塊和白塊,白塊上有字母 從上到下每一行,從左到右,給符合條件的白塊依次編號,條件是 此白塊的左邊或上邊是邊界或黑塊 要求找到每一行的單詞 按上面編好的號排序 和每一列的單詞輸出,單詞即為最大連續的白塊 只要單純地模擬即可,注意最後的輸出要按編號排序,且編號要右對齊,這裡編號不會超過1...

算典03 習題 12

這題我不會做,參考的大神的思路 傳送門浮點數在計算機裡是分三部分表示的 最前面一位表示符號,後面一部分是尾數,最後一部分是階碼 尾數是m,階碼是e的話表示起來就是 m 2e 1 2 m 1 用二進位制表示m的話就應該是0.1xx 用計算機表示的時候就把最前面的 0.1 給省略掉,只表示可能變化的部分...

算典04 習題 08

課堂上有n個學生 n 10 每個學生都有乙個 睡眠 清醒 週期,其中第i個學生醒ai 分鐘後睡bi 分鐘,然後重複 1 ai bi 5 初始時第i個學生處在他的週期的第ci 分鐘。每個學生在臨睡前會察看全班睡覺人數是否嚴格大於清醒人數,只有這個條件滿足時才睡覺,否則就堅持聽課ai 分鐘後再次檢查這個...