算法竞赛入门经典第二版课后习题 3-7 DNA序列
# include <iostream>
# include <cstring>
using namespace std;
const char EN[] = "ACGT";
int main()
{
int m,n;
cin>>m>>n;
char Map[m][n];
char Min[n];
memset(Min,'\0',sizeof(Min));
int r[4] = {0};
int hamming[m] = {0};
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
cin>>Map[i][j];
}
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
for(int x = 0; x < 4; x++)
{
if(Map[j][i] == EN[x])
{
r[x]++;
break;
}
}
}
int maxr = r[0];
int index = 0;
for(int y = 1; y < 4; y++)
{
if(r[y] > maxr)
{
maxr = r[y];
index = y;
}
}
Min[i] = EN[index];
memset(r,0,sizeof(r));
}
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(Map[i][j] != Min[j])
hamming[i]++;
}
}
cout<<"最小的DNA序列:\n";
for(int i = 0; i < n; i++)
{
cout<<Min[i];
}
cout<<"\nhamming 距离:\n";
for(int i = 0; i < m; i++)
cout<<hamming[i]<<" ";
return 0;
}