2018【第九屆藍橋杯初賽】 C/C++ B組

藍橋杯題型簡介:

5個填空題,直接輸出結果即可,無需其他輸入輸出 否則算錯,只有滿分和0分之分 

5個編程題,需要輸入測試數據,根據通過的樣例數來評分 

填空題:

1.第幾天

直接手算輸出就完了,小學題。  125

2.明碼

將所給數字轉換成八位二進制數,然後根據格式輸出,可以得到真正的問題 “九的九次方等於多少?”,然後編程求解即可

需要注意 負數轉換成二進制的方法  還需要補位  代碼裏使用的 bitset函數,比較簡單省事    滿分Code

3.乘積尾零

類似於以前做過的階乘尾零問題,直接求100個數可以哦分解出多少個2和多少個5即可,當然結果就是二者裏面嬌小的那一個

滿分Code

4.測試次數

一個區間dp問題,第一想法是二分,但是不會寫             滿分Code

dp[i][j]表示 還有i部手機j層需要測試的樓層所需要的最多測試次數  

轉移方程:dp[i][j]=min(dp[i][j],max(dp[i][j-k],dp[i-1][k-1])+1);// 沒摔壞在k層以上,摔壞了在k層以下

5.快速排序

以下代碼可以從數組a[]中找出第k小的元素。

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

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

####只填寫劃線部分缺少的代碼,不要抄寫已經存在的代碼或符號。

#include <stdio.h>

int quick_select(int a[], int l, int r, int k) {
	int p = rand() % (r - l + 1) + l;
	int x = a[p];
	{int t = a[p]; a[p] = a[r]; a[r] = t;}
	int i = l, j = r;
	while(i < j) {
		while(i < j && a[i] < x) i++;
		if(i < j) {
			a[j] = a[i];
			j--;
		}
		while(i < j && a[j] > x) j--;
		if(i < j) {
			a[i] = a[j];
			i++;
		}
	}
	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()
{
	int a[] = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12};
	printf("%d\n", quick_select(a, 0, 14, 5));
	return 0;
}

答案: a, i+1, r, k-(i-l+1)##    據說是對的

6.遞增三元組 

需要隨機組合,而不是固定位置的比較,暴力應該過不去

以 b[i] 爲參照 求a[ ]裏比 b[i] 小的元素數和c[ ]裏比 b[i] 大的元素數 二者求積

先用sort排序,再用lower_bound函數和upper_bound去找位置         滿分Code

7.螺旋折線

數學思維題,將圖形分成四個部分,求出y軸上點的距離dy,dx,然後根據橫座標爲基準旋轉,就可以推導出公式,就是有點繞

滿分Code

8.日誌統計

使用二維數組,將每一個id被點讚的時間進行排序,然後尺取,判斷有沒有在規定時間內獲得足夠的贊     滿分Code

9.全球變暖

類似於hdu1241上的石油井那個dfs求連通塊,先求沒有淹沒時的連通塊個數,然後將臨近海洋的陸地淹沒,再求一下連通塊的數量,但是爲什麼只拿了38分呢???求救        38分Code

10.乘積最大

一個貪心的策略,按照絕對值的大小進行排序,分情況討論,非常的饒人    滿分Code

1、全部都選{
    1、有零 ==0    
    2、奇數個負數 ==直接乘 取反  
    3、偶數個負數 ==直接乘
}
2、選一部分{
    1、選的全是正數 ==直接乘
    2、全是負數{
        1、奇數個負數 ==直接乘 取反
        2、偶數個負數 ==直接乘
    }
    3、正負和零都有{
        1、有零 ==0
        2、偶數個負數 ==直接乘
        3、沒有零 奇數個負數{
            1、剩餘的全是0 ==0
            2、max(用絕對值最小的負數換後面最大的正數,用最小的正數換後面絕對值最大的負數)
        }
    }
}

 

發佈了84 篇原創文章 · 獲贊 15 · 訪問量 3630
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章