給出乙個有o和x組成的串(長度為1~80),統計得分。每個o的得分為目前連續出現的o的個數,x的得分為0。例如,ooxxoxxooo的得分是為1+2+0+0+1+0+0+1+2+3。按照題目說的做就行了,超簡單。
#include#include#define maxn 80
char s[maxn];
int main()
printf("%d\n", tot);
return 0;
}
給出一種物質的分子式(不帶括號),求分子量。本題的分子式只包含4種原子,分別為c,h,o,n,原子量為12.01,1.008,16.00,14.01(單位:g/mol)。例如,c6h5oh的分子量為94.108 g/mol。按照題目做就行了。
#include#include#define maxn 80
int main()
case 'h':
case 'o':
case 'n':
} if(s[i+1] > '0' && s[i+1] <= '9')
tot += score * num;
num = 1;
} printf("%.3f\n", tot);
return 0;
}
把前n(n <= 10000)個整數順次寫在一起:123456789101112...數一數0~9各出現多少次(輸出10個整數,分別是0,1,2,..., 9出現的次數)。
如果乙個字串可以由某個長度為k的字串重複多次得到,則稱該串以k為週期。例如,abcabcabcabcabc 以3為週期(注意,它也以6 和 12 為週期)。輸入乙個長度不超過80的字串,輸出其最小週期。解法就是:#include#include#define maxn 10005
char s[maxn];
int a[10];
int main()
從小到大列舉各個週期(即從1到字串大小),一旦符合條件就立即輸出。當不是週期串時輸出
的最小週期即為其本身長度。
#include#include#define maxn 101
char s[maxn];
int main()
}if(flag) //如果是週期,即刻跳出
break;
}printf("%d", i);
return 0;
}
有乙個5*5的網路,其中恰好有乙個格仔是空的,其他格仔各有乙個字母。乙個有4種指令:a, b, l, r, 分別表示把空格上、下、左、右的相鄰字母移到空格中。輸入初始網格和指令序列(以數字0結束),輸出指令執行完畢後的網路。如果有非法指令,應輸出" this puzzle has no final configuration."。
執行arrbbl0前
trgsjx
doki
mvln
wpab
euqh
cf執行arrbbl0後
trgsjx
okli
mdvb
nmpa
euoh
cf解法:輸入初始網格和指令序列,初始網格用二維陣列表示,分別按照指令順序進行將字母
移到空格,遇到0就結束。
輸入乙個r行c列(1<=r, c<=10)的網格,黑格用「*」表示,每個白格都填有乙個字母。如果乙個白格的左邊相鄰位置或者上邊相鄰位置沒有白格(可能是黑格,也可能出了網格邊界)則稱這個白格是乙個起始格。首先把所有的起始格按照從上到下的、從左到右的順序編號為1,2,3,···,如圖所示:#include#include#define n 5
char s[n][n];
int main()
}fflush(stdin);
while((c = getchar()) != eof)
case 'b':
case 'l':
case 'r':
default: }}
printf("\n");
for(i = 0; i < n; i++)
return 0;
}
r行c列網格
123*456
*7*8
910*11
12*1314*15
16*17*
18*1920
接下來要找出所有橫向單詞(across)。這些單詞必須從乙個起始格開始,向右延伸到乙個黑格的左邊或者整個網格的最右邊。最後找出所有豎向單詞(down)。這些單詞必須從乙個起始格開始,向下延伸到乙個黑格的上邊或者整個網格的最下行。
#include#include#define max 12
int main(void)}}
if(count != 1)
printf("\n");
printf("puzzle #%d:\n", count++);
printf("across\n");
for(i = 0; i < r; i++)
printf("%3d.%c", num[i][j], buf[i][j]);//格式需要
j++;
while(j < c && buf[i][j] != '*') //當輸出到行結尾時結束或是黑格時
printf("\n");}}
printf("down\n");
for(i = 0; i < r; i++)
printf("\n");}}
}return 0;
}
輸入m個長度均為n的dna序列,求乙個dna序列,到所用序列的總hamming距離盡量小。兩個等長字串的hamming距離等於字元不同的位置個數,例如,acgt和gcga的hamming距離為2(左數第1,4個字元不同)。
輸入整數m和n(4<=m<=50, 4<=n<=100),以及m個長度為n的dna序列(只包含字母a,c,g,t),輸出到m個序列的hamming距離和最小的dna序列和對應的距離。如有多解,要求為字典序最小的結,例如,對於下面5個dna序列,最優解為taagatac。
tatgatac
taagctac
aaagatcc
tgagatac
taagatgt
演算法競賽入門經典(第2版)例題(第3章)
例題 3 1 tex中的引號 tex quotes include intmain else printf c c return0 例題 3 2 wertyu include char s 1234567890 qwertyuiop asdfghjkl zxcvbnm,int main 例題 3 3...
演算法競賽入門經典習題2 6
用1,2,3,9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要 求abc def ghi 1 2 3。按照 abc def ghi 的格式輸出所有解,每行乙個解 思路 如果首先要保證每個數字都用一次,那麼這個題就會變得很麻煩,所以就先讓abc,def,ghi產生倍數關係然後對 這三個...
演算法競賽入門經典 習題3 7
uva1368 dna consensus string 本來以為題目是要在已有序列中找乙個最小的序列,後來仔細讀了下題才發現是要構造乙個距離最小的序列。感覺這道題應該就是貪心演算法吧?每一位和已有序列的對應位差得越少,總體也就越少。include include include include u...