chaper3_exerise_Uva1368_DNA序列

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<cmath>
 4 #include<string> 
 5 #include<cstring>
 6 using namespace std;
 7 const int maxn = 1010;
 8 
 9 char str[maxn][maxn] = {0};
10 
11 int main(void)
12 {
13     int T, m, n;       //T组数据,每组数据有m个长度为n的序列
14     cin >> T;
15     while (T--)
16     {
17         string cstr;
18         int count = 0;               //计算距离 
19         cin >> m >> n;
20         memset(str,0,sizeof(str));   //初始化 
21         for (int i = 0; i < m; ++i)                                     
22         {
23             for (int j = 0; j < n; ++j)
24             {
25                 cin >> str[i][j];
26             }
27         }
28         for (int k = 0; k < n; ++k)
29         {
30             int _max = 0;                  //列上的字符出现的最大次数 
31             int vis[26] = {0};               
32             for (int kj = 0; kj < m; kj++)
33             {                                 //如果想要统计有顺序的字符的个数,想可以在相应位置上 
34                 vis[str[kj][k] - 'A']++;      //统计列上出现的次数
35                 if (vis[str[kj][k]-'A'] >= _max)
36                     _max = vis[str[kj][k]-'A']; 
37             }
38             for (int k1 = 0; k1 < 26; k1++)   //从前往后扫描最优字符 
39                 if (vis[k1] == _max){       
40                     cstr += 'A'+ k1;          //里'A'+k后就变成了到有最多数量的字符处,并赋给cstr, 
41                     break;                   //当字符数目相同的情况,由于我是从头扫描的,符合最优字符 
42                 }
43             count += m - _max;               //一列的数目减去一列中元素最多出现的个数,就是剩下不同的数目 
44         }                                    //不同的数量记入总的距离里面 
45         cout << cstr << endl;
46         cout << count << endl; 
47     } 
48     return 0;
49 }

 

posted @ 2016-06-14 17:41  douzujun  阅读(205)  评论(0编辑  收藏  举报