藍橋杯 ADV 152 演算法提高 產生數

2021-10-02 19:16:59 字數 1136 閱讀 8646

演算法提高 產生數

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

問題描述

給出乙個整數 n(n<10^30) 和 k 個變換規則(k<=15)。

規則:一位數可變換成另乙個一位數:

規則的右部不能為零。

例如:n=234。有規則(k=2):

2-> 5

3-> 6

上面的整數 234 經過變換後可能產生出的整數為(包括原數):

共 4 種不同的產生數

問題:給出乙個整數 n 和 k 個規則。

求出:經過任意次的變換(0次或多次),能產生出多少個不同整數。

僅要求輸出個數。

輸入格式:

n kx1 y1

x2 y2

… …xn yn

輸出格式:

乙個整數(滿足條件的個數):

樣例輸入

234 2

2 53 6

樣例輸出

4分析:首先我們根據輸入的變換規則構造乙個圖

#include #include void multiply(int *solutions, int *len, int x)

while (carry)

*len = i;

}int main()

; int k, x, y;

int rule[10][10] = ;

scanf("%s %d", n, &k);

for (int i = 0; i < k; ++i)

for (int l = 0; l < 10; ++l)}}

int reachable[10] = ;

for (int i = 0; i < 10; ++i)

int solutions[32] = ;

int len = 1;

for (int i = 0; i < strlen(n); ++i)

multiply(solutions, &len, reachable[n[i] - '0']);

for (int i = len - 1; i >= 0; --i)

printf("%d", solutions[i]);

return 0;

}

藍橋杯C 試題 演算法提高 產生數

給出乙個整數 n n 10 30 和k個變換規則 k 15 規則 1 1位數可變換成另乙個一位數 2 規則的右部不能為 例如 n 234,有規則 k 2 2 5 3 6 上面的整數234經過變換後可能產生出的整數為 包括原數 234534 264564 共 4 種不同的產生數 求經過任意次的變換 0...

藍橋杯 ADV 131演算法提高 選擇排序

問題描述 排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下 有n個元素a 1 a 2 a n 從小到大排序就是將它們排成乙個新順序a i 1 i k 為這個新順序。選擇排序的思想極其簡單,每一步都把乙個最小元素放到前面,如果有多個相等的最小元素,選擇排位較考前的放到當前頭部。還...

藍橋杯 ADV 20 演算法提高 交換Easy

問題描述 給定n個整數組成的序列,每次交換當前第x個與第y個整數,要求輸出最終的序列。輸入格式 第一行為序列的大小n 1 n 1000 和操作個數m 1 m 1000 第二行包含n個數字,表示初始序列。接下來m行,每行兩個整數x,y 1 x,y n 表示要交換的兩個整數。在一次交換中,如果x和y相等...