POJ1007-DNA Sorting(C语言实现)
2017-12-16 04:52
876 查看
#include <stdio.h>
#include <stdlib.h>
#define MAX_CHARS 50
#define MAX_STRINGS 100
struct DNA{
char ch[MAX_CHARS];
int inversions;
};
int cmp(const
void *a ,const
void *b);
int main(void)
{
int chars, strings;
int i, j;
int num_A, num_C, num_G, num_T;
struct DNA dna[MAX_STRINGS];
if(scanf("%d %d", &chars, &strings))
{
for(i = 0; i < strings; ++i) //输入数据
{
getchar();
for(j =
0; j < chars; ++j)
dna[i].ch[j] =
getchar();
}
for(i = 0; i < strings; ++i) //计算逆序数
{
num_A = num_C = num_G = num_T = 0;
dna[i].inversions =
0;
for(j =
0; j < chars; ++j)
{
switch(dna[i].ch[chars - j -1])
{
case
'A': num_A++; break;
case
'C': num_C++; dna[i].inversions += num_A;break;
case
'G': num_G++; dna[i].inversions += (num_A + num_C);break;
case
'T': num_T++; dna[i].inversions += (num_A + num_C + num_G);break;
default :
break;
}
}
}
qsort(dna, strings,
sizeof(dna[0]),
cmp); //排序
for(i = 0; i < strings; ++i) //输出
{
for(j =
0; j < chars; ++j)
{
putchar(dna[i].ch[j]);
}
printf("\n");
}
}
return
0;
}
int cmp(const
void *a ,const
void *b)
{
return (*(structDNA *)a).inversions > (*(structDNA
*)b).inversions ?1 : -1;
}
#include <stdlib.h>
#define MAX_CHARS 50
#define MAX_STRINGS 100
struct DNA{
char ch[MAX_CHARS];
int inversions;
};
int cmp(const
void *a ,const
void *b);
int main(void)
{
int chars, strings;
int i, j;
int num_A, num_C, num_G, num_T;
struct DNA dna[MAX_STRINGS];
if(scanf("%d %d", &chars, &strings))
{
for(i = 0; i < strings; ++i) //输入数据
{
getchar();
for(j =
0; j < chars; ++j)
dna[i].ch[j] =
getchar();
}
for(i = 0; i < strings; ++i) //计算逆序数
{
num_A = num_C = num_G = num_T = 0;
dna[i].inversions =
0;
for(j =
0; j < chars; ++j)
{
switch(dna[i].ch[chars - j -1])
{
case
'A': num_A++; break;
case
'C': num_C++; dna[i].inversions += num_A;break;
case
'G': num_G++; dna[i].inversions += (num_A + num_C);break;
case
'T': num_T++; dna[i].inversions += (num_A + num_C + num_G);break;
default :
break;
}
}
}
qsort(dna, strings,
sizeof(dna[0]),
cmp); //排序
for(i = 0; i < strings; ++i) //输出
{
for(j =
0; j < chars; ++j)
{
putchar(dna[i].ch[j]);
}
printf("\n");
}
}
return
0;
}
int cmp(const
void *a ,const
void *b)
{
return (*(structDNA *)a).inversions > (*(structDNA
*)b).inversions ?1 : -1;
}
相关文章推荐
- POJ1007 DNA Sorting 排序 C语言
- c语言实现普通队列
- C语言之----面向对象的方法实现链表的操作
- 图像旋转(C语言实现)
- C语言日志的实现,用宏实现日志
- C语言实现快速排序(完整版)DVE-C++编译通过
- 用C语言实现的简单Web服务器(Linux)
- C语言实现封装、继承和多态
- 约瑟夫循环c语言实现 (<<数据结构与算法>>-王曙燕 约瑟夫环问题解答)
- C语言实现网络嗅探器
- C语言:模拟实现memmove
- C语言实现继承和多态
- 单链表反转C语言实现
- c语言实现通讯录,包括增加名字,删除信息,查找,修改,排序
- 用c语言实现队列(FIFO)
- base64编码算法与c语言实现
- 【面试中的】C语言实现字符串函数
- 如何用c语言实现多态
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 平衡二叉树(AVL)的实现,附可运行C语言代码