APCS考題解答 - 2017/10/18
PDF: https://apcs.csie.ntnu.edu.tw/files/1061028APCSImplementation.pdf
(1) c461: apcs 邏輯運算子 (Logic Operators)
(2) c462: apcs 交錯字串 (Alternating Strings)
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
string s;
int k;
int upperLen,lowerLen;//連續大寫與小寫的長度
int len;//目前的字串交錯長度
int ansLen;//目前為止,確定的字串交錯長度,來自於len
bool isPrevUpper;//前一次是否為大寫
while(cin >> k){
cin >> s;
int length = s.length();
upperLen = 0;
lowerLen = 0;
len = 0;
ansLen = 0;
if (isupper(s[0])) {
isPrevUpper = true;//第一個是大寫
upperLen++;//連續大寫字母遞增1
if (upperLen == k){//達到k個長度
len = k;//目前的字串交錯長度為k
ansLen = max(ansLen,len);//len有更新,取ansLen與len大的到ansLen
}
}else{
isPrevUpper = false;//第一個是小寫
lowerLen++;//連續小寫字母遞增1
if (lowerLen == k){//達到k個長度
len = k;//目前的字串交錯長度為k
ansLen = max(ansLen,len);//len有更新,取ansLen與len大的到ansLen
}
}
for(int i=1;i<length;i++){//分析字串第2個到最後
if (isupper(s[i]) && isPrevUpper) {//連續大寫
upperLen++; //upperLen遞增1
lowerLen=0;
if (upperLen == k){//達到k個長度
len += k;//目前的字串交錯長度遞增k
ansLen = max(ansLen,len);//len有更新,取ansLen與len大的到ansLen
}
if (upperLen > k){//超過k個
len = k;//目前的字串交錯長度為k
}
} else if (isupper(s[i]) && (!isPrevUpper)) {//之前是小寫,現在是大寫
if (lowerLen<k){//連續小寫小於k個,且目前字元是大寫
len = 0;//目前的字串交錯長度為0
}
upperLen=1;
lowerLen=0;
if (upperLen == k){//達到k個長度
len += k;//目前的字串交錯長度遞增k
ansLen = max(ansLen,len);//len有更新,取ansLen與len大的到ansLen
}
isPrevUpper=true;//目前是大寫,供之後判斷
} else if (islower(s[i]) && (!isPrevUpper)) {//連續小寫
lowerLen++; //lowerLen遞增1
upperLen=0;
if (lowerLen == k){//達到k個長度
len += k;//目前的字串交錯長度遞增k
ansLen = max(ansLen,len);//len有更新,取ansLen與len大的到ansLen
}
if (lowerLen > k){//超過k個
len = k;//目前的字串交錯長度為k
}
}else if (islower(s[i]) && (isPrevUpper)) {//之前是大寫,現在是小寫
if (upperLen<k){//連續大寫小於k個,且目前字元是小寫
len = 0;//目前的字串交錯長度為0
}
lowerLen=1;
upperLen=0;
if (lowerLen == k){//達到k個長度
len += k;//目前的字串交錯長度遞增k
ansLen = max(ansLen,len);//len有更新,取ansLen與len大的到ansLen
}
isPrevUpper=false;//目前是小寫,供之後判斷
}
}
cout << ansLen << endl;
}
}
(3) c463: apcs 樹狀圖分析 (Tree Analyses)
7 ← 一共有7個節點
0 ← 第1個節點下有0個子節點,帶表1是葉節點
2 6 7 ← 第2個節點下有2個子節點,2個子節點分別是6,7
2 1 4 ← 第3個節點下有2個子節點,2個子節點分別是1,4
0 ← 第4個節點下有0個子節點,帶表4是葉節點
2 3 2 ← 第5個節點下有2個子節點,2個子節點分別是3,2
0 ← 第6個節點下有0個子節點,帶表6是葉節點
0 ← 第7個節點下有0個子節點,帶表7是葉節點
這題的根節點是5,代表其他節點的父節點都不包含5