演算法訓練 字串的展開

2021-07-29 08:37:21 字數 1827 閱讀 5110

演算法訓練 字串的展開  

時間限制:1.0s   記憶體限制:256.0mb

在初賽普及組的「閱讀程式寫結果」的問題中,我們曾給出乙個字串展開的例子:如果在輸入的字串中,含有類似於「d-h」或者「4-8」的字串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母獲數字串替代其中的減號,即,將上面兩個子串分別輸出為「defgh」和「45678」。在本題中,我們通過增加一些引數的設定,使字串的展開更為靈活。具體約定如下:

(1) 遇到下面的情況需要做字串的展開:在輸入的字串中,出現了減號「-」,減號兩側同為小寫字母或同為數字,且按照ascii碼的順序,減號右邊的字元嚴格大於左邊的字元。

(2) 引數p1:展開方式。p1=1時,對於字母子串,填充小寫字母;p1=2時,對於字母子串,填充大寫字母。這兩種情況下數字子串的填充方式相同。p1=3時,不論是字母子串還是數字字串,都用與要填充的字母個數相同的星號「*」來填充。

(3) 引數p2:填充字元的重複個數。p2=k表示同乙個字元要連續填充k個。例如,當p2=3時,子串「d-h」應擴充套件為「deeefffgggh」。減號兩邊的字元不變。

(4) 引數p3:是否改為逆序:p3=1表示維持原來順序,p3=2表示採用逆序輸出,注意這時候仍然不包括減號兩端的字元。例如當p1=1、p2=2、p3=2時,子串「d-h」應擴充套件為「dggffeeh」。

(5) 如果減號右邊的字元恰好是左邊字元的後繼,只刪除中間的減號,例如:「d-e」應輸出為「de」,「3-4」應輸出為「34」。如果減號右邊的字元按照ascii碼的順序小於或等於左邊字元,輸出時,要保留中間的減號,例如:「d-d」應輸出為「d-d」,「3-1」應輸出為「3-1」。

輸入格式

輸入包括兩行:

第1行為用空格隔開的3個正整數,一次表示引數p1,p2,p3。

第2行為一行字串,僅由數字、小寫字母和減號「-」組成。行首和行末均無空格。

輸出格式

輸出只有一行,為展開後的字串。

輸入輸出樣例1 輸入

輸出1 2 1

abcs-w1234-9s-4zz

abcsttuuvvw1234556677889s-4zz

輸入輸出樣例2 輸入

輸出2 3 2

a-d-d

acccbbbd-d

輸入輸出樣例3 輸入

輸出3 4 2

di-jkstra2-6

dijkstra2************6

資料規模和約定

40%的資料滿足:字串長度不超過5

100%的資料滿足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字串長度不超過100

問題分析:就是不斷的討論,情況很多,要仔細點

#include#include#includeusing namespace std;

int p1,p2,p3;

char s[110];

char add[110][500];

int main()

else if (s[i] == '-')

//右邊的字元比左邊的大

else

{int t = 0;

// 順序

if (p3 == 1)

{for(int j=s[i-1]+1; js[i-1]; j--)

{for(int k=0; k='a' && s[i-1] <='z')

{for(int j=0; j='a' && s[i-1]<='z')

{for(int j=0; j

演算法訓練 字串變換

時間限制 1.0s 記憶體限制 256.0mb 提交此題 問題描述 相信經過這個學期的程式設計訓練,大家對於字串的操作已經掌握的相當熟練了。今天,徐老師想測試一下大家對於字串操作的掌握情況。徐老師自己定義了1,2,3,4,5這5個引數分別指代不同的5種字串操作,你需要根據傳入的引數,按照徐老師的規定...

演算法訓練 字串編輯

演算法訓練 字串編輯 時間限制 1.0s 記憶體限制 512.0mb 問題描述 從鍵盤輸入乙個字串 長度 40個字元 並以字元 結束。編輯功能有 1 d 刪除乙個字元,命令的方式為 d a 其中a為被刪除的字元,例如 d s 表示刪除字元 s 若字串中有多個 s 則刪除第一次出現的。2 i 插入乙個...

演算法訓練 字串統計

演算法訓練 字串統計 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給定乙個長度為n的字串s,還有乙個數字l,統計長度大於等於l的出現次數最多的子串 不同的出現可以相交 如果有多個,輸出最長的,如果仍然有多個,輸出第一次出現最早的。輸入格式 第一行乙個數字l。第二行是字串s。l大於0,且...