UVa1368 - DNA Consensus String

举报
小哈里 发表于 2022/05/11 00:30:20 2022/05/11
【摘要】 //UVa1368 - DNA Consensus String//题目:给m个长度为n的DNA序列,求一个DNA序列到所有序列的总Hamming距离最小,Hamming距离为不同字符的位置的个数。//分析:每列找出最多重复次数。 #defien A1 //1,only DNA#defien A2 //2,已AC #ifdef A1#i...

  
  1. //UVa1368 - DNA Consensus String
  2. //题目:给m个长度为n的DNA序列,求一个DNA序列到所有序列的总Hamming距离最小,Hamming距离为不同字符的位置的个数。
  3. //分析:每列找出最多重复次数。
  4. #defien A1 //1,only DNA
  5. #defien A2 //2,已AC
  6. #ifdef A1
  7. #include<stdio.h>
  8. #include<string.h>
  9. int main(){
  10. int T;
  11. scanf("%d",&T);
  12. while(T--){
  13. //输入
  14. int m, n;
  15. scanf("%d %d",&m,&n);//m个n长度的
  16. //存储
  17. int s[n][4];
  18. memset(s,0,sizeof(s));
  19. char f[4]={'A','C','G','T'};
  20. //找个数
  21. for(int i = 0; i <= m; i++){//rows
  22. int g,count = 0;
  23. char ch;
  24. //while((ch=getchar()) != '\n'){
  25. while(scanf("%c",&ch) == 1){//every row
  26. //getchar();
  27. if(ch=='\n')break;
  28. if(ch=='A')g=0;
  29. if(ch=='C')g=1;
  30. if(ch=='G')g=2;
  31. if(ch=='T')g=3;
  32. s[count][g] += 1;
  33. count++;
  34. }
  35. }
  36. //printf("%d %d %d %d %d\n",s[1][0],s[1][1],s[1][2],s[1][3],s[0][0]);
  37. //输出
  38. for(int j = 0; j < n; j++){
  39. int max = 0, T = 4;
  40. //int *pt;
  41. while(T){
  42. //pt = &s[j][T];
  43. if(((s[j][T-1]) > (s[j][max])))max = T-1;
  44. T--;
  45. }
  46. //printf("%d\n",s[j][T-1]);
  47. printf("%c",f[max]);
  48. }
  49. putchar('\n');
  50. }
  51. return 0;
  52. }
  53. #endif
  54. #ifdef A2
  55. #include<stdio.h>
  56. #include<string.h>
  57. int main(void){
  58. int t;
  59. scanf("%d",&t);
  60. while(t--){
  61. int n,m;
  62. scanf("%d %d",&n,&m);
  63. char DNA[n][m+1];
  64. for(int i=0;i<n;i++) scanf("%s",DNA[i]);
  65. int list[4];
  66. int num=0,num1;
  67. for(int i=0;i<m;i++){
  68. memset(list,0,sizeof(list));
  69. for(int j=0;j<n;j++){
  70. if(DNA[j][i]=='A') list[0]++;
  71. else if(DNA[j][i]=='C') list[1]++;
  72. else if(DNA[j][i]=='G') list[2]++;
  73. else list[3]++;
  74. }
  75. int temp=0,ans;
  76. for(int k=0;k<4;k++){
  77. if(list[k]>temp) {
  78. ans=k;
  79. temp=list[k];
  80. num1=n-list[k];
  81. }
  82. }
  83. if(ans==0) printf("A");
  84. else if(ans==1) printf("C");
  85. else if(ans==2) printf("G");
  86. else printf("T");
  87. num+=num1;
  88. }
  89. printf("\n%d\n",num);
  90. }
  91. return 0;
  92. }
  93. #endif

文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。

原文链接:gwj1314.blog.csdn.net/article/details/54744435

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。