病毒变异pta
病毒DNA可以表示成由一些字母組成的字符串序列,且病毒的DNA序列是環(huán)狀的。例如,假設(shè)病毒的DNA序列為baa,則該病毒的DNA序列有三種變種:baa,aab,aba。試編寫一程序,對給定的病毒DNA序列,輸出該病毒所有可能的DNA序列(假設(shè)變種不會重復(fù))。
輸入格式:
輸入第一行中給出1個整數(shù)i(1≤i≤11),表示待檢測的病毒DNA。 輸入i行串序列,每行一個字符串,代表病毒的DNA序列,病毒的DNA序列長度不超過500。
輸出格式:
依次逐行輸出每個病毒DNA所有變種,各變種之間用空格分隔。
輸入樣例1:
1 baa結(jié)尾無空行
輸出樣例1:
baa aab aba結(jié)尾無空行
輸入樣例2:
2 abc baac結(jié)尾無空行
輸出樣例2:
abc bca cab baac aacb acba cbaa結(jié)尾無空行
這道題的基本思想就是通過循環(huán)語句將數(shù)組里的后一位復(fù)制給前一位,但首先要設(shè)定一個空的字符變量(比如設(shè)為tmp),將最前面的一位賦值給這個設(shè)定好的空的字符變量,然后當(dāng)循環(huán)語句結(jié)束的時候就會出現(xiàn)最后一位和倒數(shù)第二位是相同,這時就可以再將tmp賦值給最后一位,那么就實(shí)現(xiàn)將第一位移動到最后一位的計(jì)算,然后通過最外一層的循環(huán),來循環(huán)每一位,就能實(shí)現(xiàn)將數(shù)組里的每一位字符都循環(huán)到不同的位置上這一功能。
代碼如下:
#include<stdio.h> #include<string.h> #define N 501 int main() {char a[N],tmp;int n,i,j,len,k;scanf("%d ",&n);//要有一個空格,如果沒有空格就只能一次性輸完?for(k=0;k<n;k++)//每層的循環(huán)變量要不一樣 ,也可以重新令int? ....{gets(a);len=strlen(a);?//求字符串的長度printf("%s ",a);//這里不能使用puts,不然會換行?for(j=0;j<len-1;j++){tmp=a[0];/*for(i=0;i<len-1;i++)//用最基本的循環(huán)語句來實(shí)現(xiàn){a[i]=a[i+1];}*/strcpy(&a[0],&a[1]);//也可以用strcpy函數(shù)來實(shí)現(xiàn),但前提是要有sting.h這一頭文件a[len-1]=tmp;printf("%s ",a);}printf("\n"); }return 0; }總結(jié)
- 上一篇: (转)介绍Linux操作系统下的几个小游
- 下一篇: 一个绝好的大型软件ISO下载FTP站!