2019 年海淀區青少年程序設計挑戰活動復賽 小學組 C++語言試題


2019 年海淀區青少年程序設計挑戰活動復賽
小學組 C++語言試題
競賽時間:2019 年 4 月 27 日 9:00~11:00
注意事項:
1. 答題統一在windows系統下使用DEVC++5.11版本編程環境。
2. 在計算機D盤根目錄下創建一個以BJHDF和自己考號為文件名的文件夾。
如:D:\ BJHDF0001。
2. 各題最后寫好的源文件,按照題目規定的文件名存入上述文件夾中。
3. 完成作答后,提交自己創建的整個文件夾,該文件夾僅僅包含各題的源
文件,不能包含子文件夾,或其它任何文件。
4. 共有6道題目,每題100分。
切記:答案嚴格按照題目要求命名。有疑問及時舉手詢問監考老師。

 

試題


試題1:約數 (divisor)
源代碼:divisor.cpp
輸入文件:divisor.in
輸出文件:divisor.out
時間限制:1s
空間限制:512MB
【題目描述】
對於一個正整數n,如果n除以某個正整數d所得的余數為0,我們稱d是n的
約數。顯然1和n一定是n的約數,請問對於給定的n(n≥2),除了n本身以外,最
大的約數是多少?
【輸入說明】
共一行,包含一個正整數n。
【輸出說明】
共一行,包含一個正整數,表示n除了自身以外的最大約數。
【樣例輸入】
15
【樣例輸出】
5
【樣例解釋】
15的約數有1,3,5,15,除了15本身以外的最大約數為5。
【數據范圍】
對於30%的數據,n≤100;
對於50%的數據,n≤10
6;
對於100%的數據,2≤n≤2×10
9 。

 

試題2:階乘(factorial)
源代碼: factorial.cpp
輸入文件: factorial.in
輸出文件: factorial.out
時限: 1s
內存: 64M
【題目描述】
n的階乘定義為n! = n ∗ (n − 1) ∗ (n − 2) ∗ ... ∗ 1。
n的雙階乘定義為n!! = n ∗ (n − 2) ∗ (n − 4) ∗ ... ∗ 2或n!! = n
∗ (n − 2) ∗ (n − 4) ∗ ... ∗ 1,取決於n的奇偶性。
但是階乘的增長速度太快了,所以我們現在只想知道n!和n!!末尾的0的個數。
【輸入說明】
一個正整數n, n ≤ 10
7
【輸出說明】
兩個整數, 分別為n!和n!!末尾0的個數。
【樣例輸入1】
10
【樣例輸出1】
2 1
【樣例解釋1】
10! = 3628800, 10!! = 10 ∗ 8 ∗ 6 ∗ 4 ∗ 2 = 3840
【樣例輸入2】
5
【樣例輸出2】
1 0
【樣例解釋2】
5! = 120, 5!! = 5 ∗ 3 ∗ 1 = 15

 


試題3 : 序列 (sequence)
源代碼: sequence.cpp
輸入文件:sequence.in
輸出文件:sequence.out
時間限制:1s
空間限制:512MB
【題目描述】
小Z手上有一個長度為n的整數序列a1, a2,…,an,但是他不太喜歡這個序
列,因此他想通過一些操作將序列a變成自己想要的序列b。初始時序列b是空的,
接下來小Z將依次進行n次操作,其中第i次操作分為以下兩步:
1. 將ai加到序列b的尾部;
2. 翻轉序列b(即b1,b2,…,bi變成bi,bi-1,…,b1 )。
小Z想知道n次操作之后序列b會是什么樣的,你能幫助他嗎?
【輸入說明】
第一行包含一個正整數n;
第二行包含n個正整數,第i個正整數表示ai。
【輸出說明】
共一行,包含n個數,表示n次操作后的序列b。
【樣例輸入】
4
1 2 3 4
【樣例輸出】
4 2 1 3
【樣例解釋】
每次操作后序列b如下:
●1
●2,1
●3,1,2
●4,2,1,3
【數據范圍】
對於20%的數據,n≤100;
對於50%的數據,n≤1000;
對於100%的數據,1≤n≤2×10
5,0≤ai≤10
9。

 

試題4:糖果(candy)
源代碼: candy.cpp
輸入文件:candy.in
輸出文件:candy.out
時間限制:1s
空間限制:128MB
【題目描述】
小民是一個很喜歡吃糖果的小孩子,他給所有的糖果進行了分類,有A~Z 一共26種糖果,現在小民有一排糖果,小民很奇怪,吃糖果只喜歡吃連續的若干
個,並且不希望吃到相同分類的糖果。現在小民讓你幫他計算一下L的最大值,
使得他的一排糖果中的任意連續L個糖果都不會有相同的分類。
【輸入說明】
輸入僅一行,一行由大寫字母組成的字符串,代表小民的一排糖果。
【輸出說明】
輸出僅一行,輸出L的最大值。如果一排糖果都沒有相同的,請輸出− 1。
【樣例輸入】
ABABABABABAB
【樣例輸出】
2
【數據范圍】
令字符串的長度為N
對於20%的數據:1 ≤ N ≤ 100;
對於50%的數據:1 ≤ N ≤ 1000;
對於70%的數據:1 ≤ N ≤ 10000;
對於100%的數據:1 ≤ N ≤ 10000000。

 

試題5:迷宮 (maze)

源代碼:maze.cpp
輸入文件:maze.in
輸出文件:maze.out
時間限制:1s
空間限制:512MB
【題目描述】
最近,小Y在玩一款迷宮游戲,游戲是在一個n∗ m的網格上進行的,每個
格子可能是空地或者障礙物。游戲一開始,玩家控制的角色位於圖中的某塊空地
上。在游戲過程中,玩家可以用上下左右鍵控制角色向相鄰且沒有障礙物的格子
移動(當然,角色不能移動到地圖之外,也不能對角線移動)。游戲的目標是收
集地圖上出現的星星(每個星星只能收集一次),收集的數量越多分數越高。小
Y剛開了一局游戲,假設游戲時間沒有限制,他想知道自己最多能收集到多少個
星星。
【輸入說明】
第一行包含兩個正整數n和m,表示游戲的地圖包含n行m列。
接下來給出一個n×m的字符矩陣,每個字符可能為以下幾種:
● #:表示該位置有障礙物
● . (英文句號):表示該位置是空地
● *:表示該位置是空地,且生成了一顆星星
● S :表示該位置是空地,且玩家初始時位於該位置,保證圖中有且只有
一個S
【輸出說明】
共一行,包含一個整數,表示最多能收集到多少顆星星


【樣例輸入】
4 8
..#...*.
*.#.S#..
######..
.*..#.*.

【樣例輸出】
2
【數據范圍】
對於50%的數據,n,m≤40;
對於100%的數據,1≤n,m≤200。

 

試題6:盒子(box)
源代碼:box.cpp
輸入文件:box.in
輸出文件:box.out
時間限制:1s
空間限制:512MB
【題目描述】
小D在玩堆盒⼦的游戲,每個盒⼦有⼀個強度,代表它上⽅最多能堆多少個
盒⼦。由於盒⼦都是⼀樣⼤的,所以不能在⼀個盒⼦上並列放超過⼀個盒⼦。
現在小D有n個盒子,第i個盒⼦的強度為xi。⼩D想知道,如果他要把這些盒
⼦全部堆起來,至少要堆多少堆。
【輸入說明】
從⽂件box.in 讀⼊。
第⼀⾏讀⼊一個整數n,代表⼩D有的盒⼦個數。
第⼆行讀入n個整數,第i個整數xi表示第i個盒⼦的強度。
【輸入說明】
輸出到文件box.out。
共⼀行,⼀個整數表示小D⾄少要堆多少堆。
【樣例輸入】
5
0 2 1 1 2
【樣例輸出】
2
【數據范圍】
對於20%的數據,n≤10;
對於50%的數據,n≤1000;
對於100%的數據,n≤500000,xi≤1000000000。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM