---
tags: 初階班
---
# 初階班能力檢定 題解
## 第一題
應該不用多說甚麼吧
:::spoiler code
```python=
print('hello, world')
```
:::
## 第二題
就只是簡單的用```if```去判斷
:::spoiler code
```cpp=
#include<bits/stdc++.h>
using namespace std;
int main() {
int a;
cin >> a;
if (a < 6)
cout << 0;
else if (a <= 11)
cout << 590;
else if (a <= 17)
cout << 790;
else if (a <= 59)
cout << 890;
else
cout << 399;
}
```
:::
## 第三題
這題就去研究要如何判斷閏年
:::spoiler code
```cpp=
#include<bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int ans = 0;
for (int i = a; i <= b; i++) {
if (i % 400 == 0 || (i % 100 != 0 && i % 4 == 0))
ans++;
}
cout << ans << '\n';
}
```
:::
## 第四題
就是判斷一堆數字的最大值,不過有兩種解法
:::spoiler 邊輸入邊判斷
```cpp=
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int max = 0;
int m;
for (int i = 0; i < n; i++) {
cin >> m;
if (m > max)
max = m;
}
cout << max;
}
```
:::
:::spoiler sort
```cpp=
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int arr[n];
for (int i = 0; i < n; i++) cin >> arr[i];
sort (arr, arr + n);
cout << arr[n - 1];
}
```
:::
## 第五題
這一題要注意是```多筆測資```,一樣有兩種解法
:::spoiler array
```cpp=
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, m;
while(cin >> n >> m) {
int arr[n] = {0};
int ans = 0;
for(int i = 0; i < n; i++) {
cin >> arr[i];
}
for(int i = 0; i < n; i++) {
if( arr[i] <= m)
ans++;
}
cout << ans << "\n";
}
}
```
:::
:::spoiler 邊輸入邊判斷
```cpp=
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, m;
while (cin >> n >> m) {
int ans = 0;
int a;
for (int i = 0; i < n; i++) {
cin >> a;
if (a <= m)
ans++;
}
cout << ans << '\n';
}
}
```
:::
## 第六題
這題稍微有些難度,也是有兩種解法
:::spoiler string
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main () {
string str;
while (getline(cin,str)) {
string no = "我可以吃東西嗎?";
int x = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == ' ') {
string ans;
for (int j = x; j < i; j++) ans += str[j];
if (ans == no) cout << "不行 ";
else cout << "可以 ";
x = i + 1;
}
else if (i == str.length() - 1) {
string ans;
for (int j = x; j < str.length(); j++) ans += str[j];
if (ans == no) cout << "不行 ";
else cout << "可以 ";
x = i + 1;
}
}
cout << '\n';
}
}
```
:::
:::spoiler stringstream
```cpp=
#include<bits/stdc++.h>
using namespace std;
int main() {
string str;
while(getline(cin, str)) {
stringstream ss;
string ans;
ss << str;
while(ss >> ans) {
if(ans == "我可以吃東西嗎?")
cout << "不行 ";
else
cout << "可以 ";
}
cout << "\n";
}
}
```
:::
## 第七題
這一題考完試有講過,有問題再來問我
:::spoiler code
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
long long a, b;
cin >> a >> b;
cout << (a + b + 1) / 2;
}
```
:::
## 第八題
這題其實很複雜,我當初也寫了十五分鐘以上吧,所以有寫出這一題很電 :zap:
然後我丟幾個的code給你們參考
思考過程叫出題者自己說,我懶得打 :poop:
:::spoiler fang
```cpp=
#include <bits/stdc++.h>
using namespace std;
#define IO cin.tie(0);ios_base::sync_with_stdio(false);
#define endl '\n';
#define ll long long int
bool cmp(pair<char, int> &x, pair<char, int> &y) {
return x.first == y.first ? x.second < y.second : x.first < y.first;
}
int main() {
IO
int n, s;
bool m;
cin>>n>>m>>s;
while(n--) {
string str;
cin>>str;
vector<pair<char, int>> v;
for(int i = 0; i < str.size(); i++) v.push_back(make_pair(str[i], i + 1));
for(auto &i : v) if(i.first < 97) i.first += 32;
for(auto &i : v) {
if(m) {
if(i.first + (s % 26) > 122) i.first = 'a' + (s % 26) - (122 - i.first) - 1;
else i.first += (s % 26);
}
else {
if(i.first - (s % 26) < 97) i.first = 'z' - (s % 26) + (i.first - 97) + 1;
else i.first -= (s % 26);
}
}
sort(v.begin(), v.end(),cmp);
cout<<!m<<' '<<s % 26<<endl
for(auto &i : v) cout<<i.second;
cout<<endl
for(auto &i : v) cout<<i.first;
cout<<endl
}
}
```
:::
:::spoiler han
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main () {
ios::sync_with_stdio(0), cin.tie(0);
int n, m, s;
while (cin >> n >> m >> s) {
s = s % 26;
string str;
while (n--) {
cin >> str;
int arr[str.size()];
for (int i = 0; i < str.size(); i++) {
str[i] = tolower(str[i]);
arr[i] = int(str[i]);
}
if (m) {
for (int i = 0; i < str.size(); i++) {
arr[i] += s;
if (arr[i] > 122) arr[i] -= 26;
}
}
else {
for (int i = 0; i < str.size(); i++) {
arr[i] -= s;
if (arr[i] < 97) arr[i] += 26;
}
}
string str2;
for (int i = 0; i < str.size(); i++) {
str2 += (char)arr[i];
}
cout << !m << ' ' << s << '\n';
sort(arr, arr + str.size());
for (int i = 0; i < str.size(); i++) {
cout << str2.find((char)arr[i]) + 1;
str2[str2.find((char)arr[i])] = 'A';
}
cout << '\n';
for (int i = 0; i < str.size(); i++) cout << (char)arr[i];
cout << '\n';
}
}
}
```
:::
:::spoiler tree
```cpp=
#include<bits/stdc++.h>
#define LL long long
#define f first
#define s second
using namespace std;
int main(){
int n, m, s;
cin >> n >> m >> s; cin.get();
s %= 26;
while(n--){
string str; cin >> str;
for(auto & i : str){
if('A' <= i && i <= 'Z') i =i - 'A'+'a';
i -= 'a';
}
if(m){
for(auto & i : str) {
i = (i + s) % 26 + 'a';
}
}
else {
for(auto & i : str) {
i = (i - s + 26) % 26 + 'a';
}
}
pair<char, int> p[str.size()];
for(int x = 0; x < str.size(); x++){
p[x].f = str[x];
p[x].s = x + 1;
}
sort(p, p + str.size());
cout << !m << ' ' << s<<'\n';
for(int x = 0; x < str.size(); x++) cout << p[x].s;
cout << '\n';
for(int x = 0; x < str.size(); x++) cout << p[x].f;
cout << '\n';
}
return 0;
}
```
:::
:::spoiler revival
```cpp=
#include <bits/stdc++.h>
using namespace std;
int mod(int x) {
x %= 26;
while(x < 0) x += 26;
return x%26;
}
int main() {
cin.tie(0), ios_base::sync_with_stdio(0);
int n, m, s;
cin >> n >> m >> s;
while(n--) {
string str;
cin >> str;
cout << !m << ' ' << mod(s) << '\n';
for(int i = 0; i < str.size(); ++i) {
if('A' <= str[i] && str[i] <= 'Z')
str[i] = str[i] - 'A' + 'a';
}
for(auto& i : str) {
int x = i;
x -= 'a';
if(m) x = mod(x+mod(s));
else x = mod(x-mod(s));
i = x+'a';
}
vector<vector<int>> cnt(26);
for(int i = 0; i < str.size(); ++i) {
cnt[str[i]-'a'].push_back(i+1);
}
for(auto& i : cnt)
for(auto& j : i)
cout << j;
cout << '\n';
sort(str.begin(), str.end());
cout << str << '\n';
}
}
```
:::
:::spoiler wildgeese
```cpp=
#include<iostream>
#include<string>
using namespace std;
int n,s;
int m=1;
int x=3;
string word,word_sort,word2;
int check[26];
void b_to_s();
void tran();
void sort();
void position();
void reset_check();
int main(){
cin >> n >> m >> s;
s=s%26;
for(int j=0;j<n;j++){
cin >> word;
b_to_s();
tran();
word2=word;
word_sort=word;
sort();
reset_check();
if(m==0)
x=1;
else
x=0;
cout << x << " "<< s << '\n';
position();
cout << '\n';
cout << word_sort << '\n';
}
return 0;
}
void position(){
int t=0;
for(int k=0;k<word.length();k++){
// cout << " /" << check[word_sort[k]-97] << "/ ";
t=word.find(word_sort[k],check[word_sort[k]-97]);
cout << t+1;
check[word_sort[k]-97]=t+1;
}
return;
}
void sort(){
for(int k=0;k<word2.length();k++){
int min=0;
for(int m=0;m<word2.length();m++){
if(word2[min]>word2[m]){
min=m;
}
}
word_sort[k]=word2[min];
word2[min]=126;
}
return;
}
void tran(){
for(int i = 0;i<word.length();i++){
if(m==0){
word[i]-=s;
}else{
word[i]+=s;
}
if(word[i]<97)
word[i]+=26;
if(word[i]>122)
word[i]-=26;
}
return;
}
void b_to_s(){
for(int i = 0;i<word.length();i++){
if(word[i]<97)
word[i]+=32;
}
return;
}
void reset_check(){
for(int ii=0;ii<26;ii++)
check[ii]=0;
return;
}
```
:::
## 第九題
這一題應該是整個測驗最難的
欣賞大家怎麼寫就好
:::spoiler han
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main () {
//ios::sync_with_stdio(0), cin.tie(0);
int k, n;
while (cin >> k >> n) {
if (k == 0 && n == 0) return 0;
vector <int> vec(n + 1, 0);
vec[0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j < min(k ,i) + 1; j++) {
vec[i] += vec[i - j];
}
}
cout << vec[n] << '\n';
}
}
```
:::
:::spoiler tree
```cpp=
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int main(){
LL m, n;
while(cin >> m >> n){
if(m == 0 && n == 0) return 0;
LL arr[n + 1]; arr[0] = 1;
for(int x = 1; x <= n; x++){
if(x <= m) arr[x] = pow(2, x - 1);
else arr[x] = arr[x - 1] * 2 - arr[x - m - 1];
}
cout << arr[n] << '\n';
}
return 0;
}
```
:::
:::spoiler revival
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main() {
//cin.tie(0), ios_base::sync_with_stdio(0);
int k, n;
while(cin >> k >> n) {
if(k == 0 && n == 0)
return 0;
vector<int> vt(n+1, 0);
vt[0] = 1;
for(int i = 1; i <= n; ++i) {
for(int j = 0; j < min(k, i); ++j)
vt[i] += vt[i-j-1];
}
cout << vt[n] << '\n';
}
}
```
:::
:::spoiler william
```cpp=
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main () {
int k, n;
while(cin >> k >> n) {
if(k == 0 && n == 0) break;
vector<int> vc(n + 1, 0);
vc[0] = vc[1] = 1;
for(int i = 1; i <= n; i++) {
int ans = 0;
for(int j = 1; j <= k && i - j >= 0; j++) {
ans += vc[i - j];
}
vc[i] = ans;
}
cout << vc[n] << endl;
}
}
```
:::
---
## 以上就是本次測驗的題解,祝大家都越來越電 :zap: