??視頻講解:GESP2024年6月三級C++真題講解
一、單選題
第1題
解析:
答案C,
認證語言有C/C++、Python、Scratch
第2題
解析:
答案B,判斷閏年口訣“? 4閏? 100不閏? 400再閏 ”
第3題
解析:
答案C,32個字節,表達2的32次方,但是最高位表示符號位,需32-1
第4題
解析:
答案C,
i++保證下一位 8進制數存儲
decimal%8取出 當前余數
decimal/=8? 更新 “被除數”
第5題
解析:
答案C,
101(2)=5(10)
0.11(2)=0.75(10)
第6題
解析:
答案B,
i循環為:0,1,2,3,4
i為1時,j循環1次;i為2時,j循環2次,每次循環 sum+1
總共循環10次,即sum=10
第7題
解析:
答案C,
12(10)=1100(2)
右移兩位,變 11(2),即十進制的3
第8題
解析:
答案C,就是在做a、b交換
a=a^b;? 記錄差異
b=a^b;? 根據差異 獲取原來的a
a=a^b;? 根據差異 獲取原來的b
第9題
解析:
答案C,長度為4,但是官方答案給了C
題目想表達應該是占有內存,因為字符串尾部有‘\0’終止符,所有占用內存為5
第10題
解析:
答案B,有人比max大,max才把它搶過來
第11題
解析:
答案A,
count++ 表示數量+1
=i? 表獲取當前的數
第12題
解析:
答案C,
0的ascii是:48
6的ascii是:48+6
2的ascii是:48+2
9的ascii是:48+9
結果為:48*4 + 6+2+9=209
第13題
解析:
答案B,
+= 才能進行累加
arr[i] > 135 ?? 1 : 0? 表示:滿足>135 返回1,否則返回0
第14題
解析:
答案D,輸出字符串要用 雙引號
第15題
解析:
答案A,
模擬第一次
字符:g e s p . c f
下標:0 1 2 3 4 5 6
found=4
token= str.subsrt(0,4) 也就是起點為0,4個字符 ,即“gesp”
result+=token; result+=" "; 即“gesp ”尾部加個空格
要想獲取后半部分,起點下標是5
只有A選項符合
二、判斷題
第1題
解析:
答案√,與語言無關,等級即對應能力
第2題
解析:
答案√,
-6原碼:1000 0000,0000 0110
-6反碼:1111 1111,1111 1001
-6補碼:1111 1111,1111 1010
十六進制:F F F A
第3題
解析:
答案√,補碼就是為了解決減法問題
第4題
解析:
答案×,字符‘0’ 是有ASCII值48的,‘\0’一無所有
第5題
解析:
答案×,數組就是連續存放的,鏈表才不是
第6題
解析:
答案×,不能直接對數組賦值
第7題
解析:
答案√,a為0至3時,最高位只能在2,a一旦超過3,最高位就超了,a|3就不可能==3了
第8題
解析:
答案×,
b=01100,0開頭表示八進制,b對應二進制是000 0010 0100 0000
a&b結果為0
第9題
解析:
答案√,
i循環為1,2,3,4,5
(i+1)%3的結果分別為:2,0,1,2,0
而題目中的89781, 1%3的結果為1,最后一個不可能為1
第10題
解析:
答案√,
//枚舉所有4位數
for(int i=1000;i<=9999;i++){//獲取左右兩邊a=i/100;b=i%100;//判斷是否符合if( (a+b)*(a+b)==i ){cout<<i;}
}
三、編程題
第1題 [GESP202406 三級] 移位
題目描述
小楊學習了加密技術移位,所有大寫字母都向后按照?個固定數目進行偏移。偏移過程會將字母表視作首尾相接的環,例如,當偏移量是?3?的時候,大寫字母 A 會替換成 D,大寫字母 Z 會替換成 C,總體來看,大寫字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 會被替換成 DEFGHIJKLMNOPQRSTUVWXYZABC。
注:當偏移量是?26?的倍數時,每個大寫字母經過偏移后會恰好回到原來的位置,即大寫字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 經過偏移后會保持不變。
輸入格式
第一行包含一個正整數?n。
輸出格式
輸出在偏移量為?n?的情況下,大寫字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 移位替換后的結果。
輸入輸出樣例
輸入 #1
3
輸出 #1
DEFGHIJKLMNOPQRSTUVWXYZABC
說明/提示
【樣例解釋】
當偏移量是?3?的時候,大寫字母 A 會替換成 D,大寫字母 Z 會替換成 C,總體來看,大寫字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 會被替換成 DEFGHIJKLMNOPQRSTUVWXYZABC。
【數據范圍】
對于全部數據,保證有?1≤n≤100。
答案
#include <bits/stdc++.h>
using namespace std;
int main() {//1)確定偏移量nint n;cin>>n;//2)循環"A"至"Z"for(int i=0;i<=25;i++){//3)計算出”實際偏移量“int true_num='A'+i -'A' +n;//4)輸出加密后(’A‘+實際偏移量%26)cout<<char('A'+true_num%26);}}
第2題 ?[GESP202406 三級] 尋找倍數
題目描述
小楊有一個包含?n?個正整數的序列?A=[a1?,a2?,…,an?],他想知道是否存在?i(1≤i≤n)?使得?ai??是序列?A?中所有數的倍數。
輸入格式
第一行包含一個正整數?t,代表測試用例組數。
接下來是?t?組測試用例。對于每組測試用例,一共兩行。
其中,第一行包含一個正整數?n;第二行包含?n?個正整數,代表序列?A。
輸出格式
對于每組測試用例,如果存在?i(1≤i≤n)?,滿足對于所有?k(1≤k≤n)?ai??是?ak??的倍數,輸出?Yes
,否則輸出?No
。
輸入輸出樣例
輸入 #1
2
3
1 2 4
5
1 2 3 4 5
輸出 #1
Yes
No
說明/提示
【樣例解釋】
對于第?組數據,對于?a3?=4,滿足?a3??是?a1??和?a2??的倍數。
【數據范圍】
對于全部數據,保證有?1≤t≤10,1≤n≤,1≤ai?≤
。
答案
#include <bits/stdc++.h>
using namespace std;
int main() {//1)確定序列數量tint t;cin>>t;//2)填充每個序列for(int i=1;i<=t;i++){//2.1)確定序列的長度int n;cin>>n;//2.2)填充當前序列的每個元素int arr[100010]={};int maxx=INT_MIN;for(int j=1;j<=n;j++){cin>>arr[j];//3)填充的同時找最大值if(maxx<arr[j]) maxx=arr[j];}//4)驗證該該最大值是否所有元素的倍數//4.1)假設符合bool flag=true;//4.2)驗證是否符合 for(int j=1;j<=n;j++){if(maxx%arr[j]!=0){flag=false;break;}}//5)根據flag判斷if(flag) cout<<"Yes"<<endl;else cout<<"No"<<endl;}
}