用c语言实现<人类基因函数>

Python014

用c语言实现<人类基因函数>,第1张

#include <stdio.h>

#include <string.h>

#define MAX 20

#define ENTRY_COUNT 14

#define INVALID -1000

typedef struct{

char A

char B

int Pro

}PROXIMITY_ENTRY

// entry sort from small to big

// '-', 'A', 'C', 'G', 'T'

PROXIMITY_ENTRY prox_tbl[ENTRY_COUNT] = {

{'-', 'A', -3},

{'-', 'C', -2},

{'-', 'G', -1},

{'-', 'T', -4},

{'A', 'A', 5},

{'A', 'C', -2},

{'A', 'G', -1},

{'A', 'T', -1},

{'C', 'C', 5},

{'C', 'G', -2},

{'C', 'T', -3},

{'G', 'G', 5},

{'G', 'T', -2},

{'T', 'T', 5}

}

// Insert a char to a string with index

void insert(char *str, int index)

{

char *p = str

int i = strlen(str)

while(i >= index)

{

*(p+i+1) = *(p+i)

i--

}

*(p+index) = '-'

}

// Proximity of two Gene ceil

int proximity(char a, char b)

{

int i

if(a >b)

{

return proximity(b, a)

}

for(i=0i<ENTRY_COUNTi++)

{

if((a == prox_tbl[i].A) &&(b == prox_tbl[i].B))

{

return prox_tbl[i].Pro

}

}

return INVALID

}

// Proximity of two Gene serial

int compare(char gene1[], char gene2[])

{

int i, n = strlen(gene1), sum = 0, temp

for(i=0i<ni++)

{

temp = proximity(gene1[i], gene2[i])

if (temp == INVALID)

{

sum = INVALID

break

}

else

{

sum += temp

}

}

return sum

}

// Insert '-' for max proximity of genes

int balance(char gene1[], char gene2[])

{

int i, sum, index = 0

static int max = INVALID

char str1[MAX]

int len1 = strlen(gene1)

int len2 = strlen(gene2)

if (len1 == len2)

{

return compare(gene1, gene2)

}

if (len1 >len2)

{

return balance(gene2, gene1)

}

for(i=0i<=len1i++)

{

strcpy(str1, gene1)

insert(str1, i)

sum = balance(str1, gene2)

if (sum >max)

{

max = sum

index = i

printf("%d: ", max)

printf("%s ", str1)

printf("%s\n", gene2)

}

}

return max

}

int main(void)

{

char gene1[MAX], gene2[MAX]

int pro

scanf("%s", gene1)

scanf("%s", gene2)

pro = balance(gene1, gene2)

if (pro == INVALID)

{

printf("Invalid input!\n")

}

else

{

printf("Max proximity: %d\n", pro)

}

return 0

}

输入

计算逆序

稳定排序

代码:

#include <stdio.h>

#include <string.h>

typedef struct

{

char arr[51]

int v

}ARR

int main()

{

ARR list[100]

ARR t

int n,l,i,j,k

scanf("%d%d", &l, &n)

for(i = 0 i < n i ++)

{

scanf("%s", list[i].arr)

list[i].v = 0

for(j = 0 j < l - 1 j ++)

{

for(k = j + 1 k < l k ++)

if(list[i].arr[k] < list[i].arr[j])

list[i].v ++

}

}

for (i = 0 i < n i++) 

{         

for (j = n - 1 j > i j--)

{     

if (list[j].v < list[j-1].v) 

{        

memcpy(&t, &list[j-1], sizeof t)   

memcpy(&list[j-1], &list[j], sizeof t)   

memcpy(&list[j], &t, sizeof t)   

}      

}   

for(i = 0 i < n i ++)

printf("%s\n", list[i].arr)

return 0

}

供参考

是否有问题? 有问题请追问 没问题请采纳