文章目錄
- 1.藍橋杯必備知識點
- 2. 題型1
- 3.需求2
1.藍橋杯必備知識點
藍橋杯是一個面向全國高校計算機相關專業學生的學科競賽,涵蓋多個賽道,常見的有軟件類(如 C/C++ 程序設計、Java 軟件開發、Python 程序設計)和電子類(如嵌入式設計與開發、單片機設計與開發等)。以下為你分別介紹軟件類和電子類省賽的必備知識點:
軟件類
編程語言基礎
C/C++基本語法:變量、數據類型(如整型、浮點型、字符型、指針等)、運算符、控制結構(如 if-else、for、while 循環)等。函數:函數的定義、調用、參數傳遞(值傳遞、指針傳遞、引用傳遞)。數組和字符串:數組的定義、初始化、訪問,字符串的處理(如字符串的輸入輸出、字符串函數的使用)。結構體和聯合體:結構體和聯合體的定義、使用,結構體數組等。文件操作:文件的打開、讀寫、關閉操作。
Java基本語法:變量、數據類型、運算符、控制語句。面向對象編程:類、對象、繼承、多態、封裝等概念,以及類的定義、方法的使用。字符串處理:String 類、StringBuilder 類的使用。集合框架:List、Set、Map 等集合的使用,以及迭代器的遍歷。異常處理:try-catch-finally 語句的使用。
Python基本語法:變量、數據類型(如列表、元組、字典、集合)、控制流語句。函數和模塊:函數的定義和調用,模塊的導入和使用。文件操作:文件的讀寫操作。面向對象編程:類和對象的創建,方法和屬性的使用。
數據結構
數組:一維數組、多維數組的使用,數組的排序(如冒泡排序、快速排序)和查找(如二分查找)。
鏈表:單鏈表、雙向鏈表的實現,鏈表的插入、刪除、查找操作。
棧和隊列:棧和隊列的基本概念,棧的后進先出(LIFO)和隊列的先進先出(FIFO)特性,以及棧和隊列的實現和應用。
樹:二叉樹的遍歷(前序、中序、后序遍歷),二叉搜索樹的基本操作。
圖:圖的表示(鄰接矩陣、鄰接表),圖的遍歷(深度優先搜索、廣度優先搜索)。
算法
搜索算法:深度優先搜索(DFS)、廣度優先搜索(BFS),常用于解決迷宮問題、路徑搜索問題等。
動態規劃:通過將原問題分解為相對簡單的子問題,并保存子問題的解來避免重復計算,常用于解決最優子結構問題,如背包問題、最長公共子序列問題。
貪心算法:在每一步選擇中都采取當前狀態下的最優選擇,期望通過局部最優達到全局最優,如哈夫曼編碼、活動選擇問題。
排序算法:除了上述提到的冒泡排序、快速排序,還需要掌握選擇排序、插入排序、歸并排序等排序算法的原理和實現。
數學知識
數論:質數的判斷、最大公約數(GCD)和最小公倍數(LCM)的計算,以及同余定理等。
組合數學:排列組合的計算,常用于解決計數問題。
電子類
電路基礎
電路元件:電阻、電容、電感等基本元件的特性和參數計算。
電路定律:歐姆定律、基爾霍夫定律(電流定律和電壓定律)的應用。
電路分析方法:節點電壓法、網孔電流法等電路分析方法。
單片機知識
單片機原理:單片機的基本結構、工作原理,如 CPU、存儲器、I/O 接口等。
編程語言:常見的單片機編程語言為 C 語言,需要掌握單片機 C 語言的編程規范和技巧。
外設驅動:掌握單片機的各種外設驅動,如定時器、計數器、串口通信、中斷系統等。
傳感器與執行器
傳感器:了解常見傳感器的工作原理和使用方法,如溫度傳感器、光照傳感器、加速度傳感器等。
執行器:掌握執行器的控制方法,如電機驅動、繼電器控制等。
PCB 設計基礎
原理圖設計:使用專業的 PCB 設計軟件(如 Altium Designer)進行原理圖的繪制。
PCB 布局布線:掌握 PCB 布局布線的基本原則和方法,避免電磁干擾等問題。
2. 題型1
### 2.1代碼
# @File: 14.星期一計數.py
# @Author: chen_song
# @Time: 2025-02-25 10:41
from datetime import datetime, timedelta# 分割日期字符串為年、月、日
def divideToThreeParts(date):years = int(date[:4])month = int(date[4:6])day = int(date[6:8])return years, month, day# 判斷是否閏年
def isLeapYear(year):return (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)# 獲取1 - 12月的天數
def getDaysOfMonthAccording2Year(month, year):if month in [1, 3, 5, 7, 8, 10, 12]:return 31if month in [4, 6, 9, 11]:return 30if month == 2:return 29 if isLeapYear(year) else 28# 寫一個函數實現對任意日期之間天數計算
def countDaysBetweenRandomDates(date1, date2):year1, month1, day1 = divideToThreeParts(date1)year2, month2, day2 = divideToThreeParts(date2)# 計算起始日期到當年年底的天數days1 = 0for m in range(month1, 13):if m == month1:days1 += getDaysOfMonthAccording2Year(m, year1) - day1else:days1 += getDaysOfMonthAccording2Year(m, year1)# 計算中間完整年份的天數days2 = 0for y in range(year1 + 1, year2):days2 += 366 if isLeapYear(y) else 365# 計算結束日期所在年份年初到結束日期的天數days3 = 0for m in range(1, month2):# 獲取最后一年前幾個月的天數days3 += getDaysOfMonthAccording2Year(m, year2)days3 += day2return days1 + days2 + days3date1 = input()
year1, month1, day1 = divideToThreeParts(date1)
dateTime1 = datetime(year1, month1, day1)# 獲得第一個周一
while dateTime1.weekday() != 0:dateTime1 += timedelta(days=1)
date1 = dateTime1.strftime("%Y%m%d")date2 = input()
year2, month2, day2 = divideToThreeParts(date2)
dateTime2 = datetime(year2, month2, day2)# 檢查第一個周一是否超過結束日期
if dateTime1 > dateTime2:result = 0
else:days = countDaysBetweenRandomDates(date1, date2)result = days // 7 + 1print(result)
3.需求2
## 3.1代碼
from datetime import datetime# 獲取用戶輸入的日期
input_date = input()
a, b, c = map(int, input_date.split('/'))# 定義日期范圍
start_date = datetime(1960, 1, 1)
end_date = datetime(2059, 12, 31)# 定義一個函數來判斷日期是否合法
def is_valid_date(year, month, day):try:# 嘗試創建日期對象,如果日期不合法會拋出 ValueError 異常date = datetime(year, month, day)return start_date <= date <= end_dateexcept ValueError:return False# 生成所有可能的日期組合 枚舉
all_combinations = [(1900 + a, b, c), (2000 + a, b, c),(1900 + c, a, b), (2000 + c, a, b),(1900 + c, b, a), (2000 + c, b, a)
]# 存儲合法的日期
valid_dates = []
for year, month, day in all_combinations:if is_valid_date(year, month, day):valid_dates.append(datetime(year, month, day))# 去除重復的日期并排序
unique_dates = sorted(set(valid_dates))# 輸出結果
for date in unique_dates:print(date.strftime("%Y-%m-%d"))