藍橋杯填空題(一)

2021-09-11 20:40:24 字數 2541 閱讀 6886

以下**可以從陣列a中找出第k小的元素。

它使用了類似快速排序中的分治演算法,期望時間複雜度是o(n)的。

請仔細閱讀分析原始碼,填寫劃線部分缺失的內容。

#include int quick_select(int a, int l, int r, int k) 

int i = l, j = r;

while(i < j)

while(i < j && a[j] > x) j--;

if(i < j)

} a[i] = x;

p = i;

if(i - l + 1 == k) return a[i];

if(i - l + 1 < k) return quick_select( _____________________________ ); //填空

else return quick_select(a, l, i - 1, k);

} int main()

; printf("%d\n", quick_select(a, 0, 14, 5));

return 0;

}

注意:只填寫劃線部分缺少的**,不要抄寫已經存在的**或符號。

求1個整數的第k位數字有很多種方法。

以下的方法就是一種。

// 求x用10進製表示時的數字長度 

int len(int x)

// 取x的第k位數字

int f(int x, int k)

int main()

對於題目中的測試資料,應該列印5。

請仔細分析原始碼,並補充劃線部分所缺少的**。

注意:只提交缺失的**,不要填寫任何已有內容或說明性的文字。

最大公共子串長度問題就是:

求兩個串的所有子串中能夠匹配上的最大長度是多少。

比如:"abcdkkk" 和 "baabcdadabc",

可以找到的最長的公共子串是"abcd",所以最大公共子串長度為4。

下面的程式是採用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。

請分析該解法的思路,並補全劃線部分缺失的**。

#include #include #define n 256

int f(const char* s1, const char* s2)

}}return max;

}int main()

排序在各種場合經常被用到。

快速排序是十分常用的高效率的演算法。

其思想是:先選乙個「標尺」,

用它把整個佇列過一遍篩子,

以保證:其左邊的元素都不大於它,其右邊的元素都不小於它。

這樣,排序問題就被分割為兩個子區間。

再分別對子區間排序就可以了。

下面的**是一種實現,請分析並填寫劃線部分缺少的**。

#include void swap(int a, int i, int j)

int partition(int a, int p, int r)

______________________;

return j;

}void quicksort(int a, int p, int r)

for(i=0; i<=a[k]; i++)

void f(int x, int k)

for(i=k;i<9; i++)

f(x,k+1);

_____________________________________________// 填空處

}}int main()

; f(x,0);

return0;

}

交換值之後,呼叫f(x,k+1);之後,要把值交換回來。

對乙個方陣轉置,就是把原來的行號變列號,原來的列號變行號

例如,如下的方陣:

1  2 3  4

5  6 7  8

9 10 11 12

13 14 15 16

轉置後變為:

1  5  9 13

2  6 10 14

3  7 11 15

4  8 12 16

但,如果是對該方陣順時針旋轉(不是轉置),卻是如下結果:

13  9  5  1

14 10  6  2

15 11  7  3

16 12  8  4

下面的**實現的功能就是要把乙個方陣順時針旋轉。

void rotate(int* x, int rank)

for(i=0; ifree(y);}

int main(int argc, char* ar**)

,,,};

int rank = 4;

rotate(&x[0][0], rank);

for(int i=0; iprintf("\n");

} return 0;

}

藍橋杯填空題 剪郵票

如下面第一張圖,有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 具體例子比如第二張,第三張圖中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。思路 先找到5個數的組合,然後從第乙個數字開始遍歷,經過上下左右操作檢測5個數是否都...

藍橋杯填空題 獎券數目

有些人很迷信數字,比如帶 4 的數字,認為和 死 諧音,就覺得不吉利。雖然這些說法純屬無稽之談,但有時還要迎合大眾的需求。某 活動的獎券號碼是5位數 10000 99999 要求其中不要出現帶 4 的號碼,主辦單位請你計算一下,如果任何兩張獎券不重號,最多可發出獎券多少張。思路 迴圈遍歷每一位數字的...

藍橋杯填空題 加法變乘法

加法變乘法 我們都知道 1 2 3 49 1225 現在要求你把其中兩個不相鄰的加號變成乘號,使得結果為2015 比如 1 2 3 10 11 12 27 28 29 49 2015 就是符合要求的答案。請你尋找另外乙個可能的答案,並把位置靠前的那個乘號左邊的數字提交 對於示例,就是提交10 思路 ...