演算法提高 產生數
時間限制: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相等...