藍橋杯 ALGO 32 演算法訓練 JAM計數法

2021-10-01 19:50:28 字數 1220 閱讀 1826

演算法訓練 jam計數法  

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

問題描述

jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文本母計數,他覺得這樣做,會使世界更加豐富多彩。在他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文本母按原先的順序,排在前面的字母小於排在它後面的字母。我們把這樣的「數字」稱為jam數字。在jam數字中,每個字母互不相同,而且從左到右是嚴格遞增的。每次,jam還指定使用字母的範圍,例如,從2到10,表示只能使用這些字母。如果再規定位數為5,那麼,緊接在jam數字「bdfij」之後的數字應該是「bdghi」。(如果我們用u、v依次表示jam數字「bdfij」與「bdghi」,則u輸入格式

有2行,第1行為3個正整數,用乙個空格隔開:

s t w

(其中s為所使用的最小的字母的序號,t為所使用的最大的字母的序號。w為數字的位數,這3個數滿足:1≤s輸出格式

最多為5行,為緊接在輸入的jam數字後面的5個jam數字,如果後面沒有那麼多jam數字,那麼有幾個就輸出幾個。每行只輸出乙個jam數字,是由w個小寫字母組成的字串,不要有多餘的空格。

樣例輸入

2 10 5

bdfij

樣例輸出

bdghi

bdghj

bdgij

bdhij

befgh

分析:這題是要求給定的集合中選取若干個元素所組成的有序排列的下乙個排列,可以通過模擬「棧」的操作進行。需要注意的是,對於jam數a[0..w-1],其中第i位可以出現的最大的字母應該為'a' + t - (w - i)。例如,樣例中,t = 10,w = 5,第i = 3位(倒數第2位)允許出現的最大字母應該為字母"i",而'a' + 10 - (5 - 3) = 'a' + 8 = 'i'。

#include int main()

; int top;

char current;

int count;

scanf("%d %d %d", &s, &t, &w);

scanf("%s", number);

top = w-1;

count = 0;

do printf("%s\n", number);

count++;

}} while (top >= 0 && count < 5);

return 0;

}

藍橋杯 演算法訓練 ALGO12

問題描述 如果乙個序列滿足下面的性質,我們就將它稱為擺動序列 1.序列中的所有數都是不大於k的正整數 2.序列中至少有兩個數。3.序列中的數兩兩不相等 4.如果第i 1個數比第i 2個數大,則第i個數比第i 2個數小 如果第i 1個數比第i 2個數小,則第i個數比第i 2個數大。比如,當k 3時,有...

藍橋杯 ALGO 83 演算法訓練 階乘

問題描述 乙個整數n的階乘可以寫成n 它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13 就已經比較大了,已經無法存放在乙個整型變數中 而35 就更大了,它已經無法存放在乙個浮點型變數中。因此,當n比較大時,去計算n 是非常困難的。幸運的是,在本題中,我們的任務不是去計算n 而是去計算...

藍橋杯 ALGO 33 演算法訓練 數列

演算法訓練 數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 30,31,30 31,32,30 32,...