Deoxynucleotide sequence

本文介绍如何使用程序模拟限制酶Sma I切割DNA双链并进行人工逆序连接,以实现DNA片段重组。通过实例演示了输入DNA序列ACCCGGGTCCCGGGTT和TGGGCCCAGGGCCCAA的操作过程,最终输出重组后的DNA序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

限制酶SmaⅠ可识别的脱氧核苷酸序列为CCCGGG,并切割C-G处磷酸二酯键。现实验室拟使用人工法逆序连接充分切割后的DNA片段。请设计程序,给出重组后的DNA序列。

Input

共两行,两个字符串,即切割前DNA双链的脱氧核苷酸序列.

Output

共两行,输出重组后的DNA双链的脱氧核苷酸序列.

Sample Input

ACCCGGGTCCCGGGTT

TGGGCCCAGGGCCCAA

Sample Output

GGGTTGGGTCCCACCC

CCCAACCCAGGGTGGG

Hint

样例中切割片段依次为:

ACCC  GGGTCCC  GGGTT

TGGG  CCCAGGG  CCCAA

逆序连接后的DNA序列为:

GGGTT|GGGTCCC|ACCC

CCCAA|CCCAGGG|TGGG

保证输入DNA序列长度不超过100,且字符串仅含A、T、C、G四个字符。

切割和重组操作是独立的,即重组DNA允许含有CCCGGG序列。

# include<stdio.h>
# include<string.h>
/*Description
限制酶SmaⅠ可识别的脱氧核苷酸序列为CCCGGG,并切割C-G处磷酸二酯键。
现实验室拟使用人工法逆序连接充分切割后的DNA片段。请设计程序,给出重组后的DNA序列。
Input共两行,两个字符串,即切割前DNA双链的脱氧核苷酸序列.
Output共两行,输出重组后的DNA双链的脱氧核苷酸序列.
Sample Input
ACCCGGGTCCCGGGTT
TGGGCCCAGGGCCCAA
Sample Output
GGGTTGGGTCCCACCC
CCCAACCCAGGGTGGG
Hint
样例中切割片段依次为:
ACCC  GGGTCCC  GGGTT
TGGG  CCCAGGG  CCCAA
逆序连接后的DNA序列为:
GGGTT|GGGTCCC|ACCC
CCCAA|CCCAGGG|TGGG
保证输入DNA序列长度不超过100,且字符串仅含A、T、C、G四个字符。
切割和重组操作是独立的,即重组DNA允许含有CCCGGG序列。
*/

int main()
{
	char a1[100], a2[100], b1[100], b2[100];
	
	gets(a1);
	gets(a2);//读取两行DNA 
	
	int n = strlen(a1);//DNA长度 
	int k = 0;
	for (int i = 3;i <= n - 3;i ++)
	{
		if ((a1[i - 3] == 'C' && a1[i - 2] == 'C' && a1[i - 1] == 'C' 
			&& a1[i] == 'G' && a1[i + 1] == 'G' && a1[i +2] == 'G') ||
			(a1[i - 3] == 'G' && a1[i - 2] == 'G' && a1[i - 1] == 'G' 
			&& a1[i] == 'C' && a1[i + 1] == 'C' && a1[i +2] == 'C') )//检测可识别的核酸序列
			//检测出的地址第即i——核酸序列的第4个碱基对(也可以用strstr函数找第一个碱基对 
		{
			for (int j = k;j < i;j ++)//这个循环用于逆序操作,操作的碱基对为上一个检测到的地址到
			//这一次检测到的地址之前 
			{
				b1[j + n - i - k] = a1[j];//可以看出,b1是从n-i开始遍历,a1从i开始遍历
				//第一位的地址(中心对称) 
				b2[j + n - i - k] = a2[j];
			}
			k = i;
		}
		
	}
	
	for (int j = k;j < n;j ++)//最后一段无法通过上面的循环交换顺序 (由于上面的循环操作的碱基对 
	{
		b1[j - k] = a1[j];//操作最后一段碱基对 
		b2[j - k] = a2[j];
	}
	
	b1[n] = '\0';//给字符数组加上\0,使其成为字符串,再打印 
	puts(b1);//puts函数自带换行 
	b2[n] = '\0';
	puts(b2);
	
	return 0;
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值