目錄
1.L1-071 前世檔案
2.L1-072 刮刮彩票
3.L1-073 人與神
4.L1-074 兩小時學完C語言
5.L1-075 強迫癥
6.L1-076 降價提醒機器人
7.L1-077 大笨鐘的心情
8.L1-078 吉老師的回歸
9.L1-079 天梯賽的善良
10.L1-080 乘法口訣數列
1.L1-071 前世檔案
解析:
觀察規律,如果從1開始,如果向右是否,則結果翻倍,否則變為翻倍-1
#include<iostream>using namespace std;int n,len;string s;
signed main() {cin>>len>>n;for(int i=0;i<n;i++) {cin>>s;int indexs = 1;for(int i=0;i<s.size();i++) indexs = indexs*2- (s[i] == 'y' ? 1:0);cout<<indexs<<endl;} return 0;
}
2.L1-072 刮刮彩票
#include<iostream>
#include<vector>
#include<map>using namespace std;const int N = 5;
int arr[N][N];
int x,y; // 選擇刮開的位置 或者是 0所在的位置
int line_index; // 最后輸入的線編號
int sum; // 選擇的線的總和
int sum_num[] = {0,0,0,0,0,0,0,0,0,0};
map<int,int> my_map;
int check_num(int *a) {for(int i=1;i<=9;i++) {if (!a[i]) return i;}
}void init_map() {my_map.insert({6,10000});my_map.insert({7,36});my_map.insert({8,720});my_map.insert({9,360});my_map.insert({10,80});my_map.insert({11,252});my_map.insert({12,108});my_map.insert({13,72});my_map.insert({14,54});my_map.insert({15,180});my_map.insert({16,72});my_map.insert({17,180});my_map.insert({18,119});my_map.insert({19,36});my_map.insert({20,306});my_map.insert({21,1080});my_map.insert({22,144});my_map.insert({23,1800});my_map.insert({24,3600});
}
signed main() {init_map();for(int i=1;i<=3;i++) {for(int j=1;j<=3;j++) {cin>>arr[i][j];if(arr[i][j] == 0) {x = i;y=j;} sum_num[arr[i][j]] ++;}}int available_num = check_num(sum_num);arr[x][y] = available_num; // 補全缺失數字for(int i=0;i<3;i++) {cin>>x>>y;cout<<arr[x][y]<<endl;;} cin>>line_index;if (1<=line_index && line_index<=3) for (int i=1;i<=3;i++) sum+=arr[line_index][i]; else if (4<=line_index && line_index<=6) for (int i=1;i<=3;i++) sum+=arr[i][line_index-3]; else {if (line_index == 7) {sum += arr[1][1];sum += arr[2][2];sum += arr[3][3];} else if (line_index == 8) {sum += arr[3][1];sum += arr[2][2];sum += arr[1][3];}}cout<<my_map[sum]<<endl;return 0;
}
3.L1-073 人與神
#include<iostream>
#include<vector>
#include<map>using namespace std;signed main() {cout<<"To iterate is human, to recurse divine."; return 0;
}
4.L1-074 兩小時學完C語言
#include<iostream>
#include<vector>
#include<map>using namespace std;int n,k,m;signed main() {cin>>n>>k>>m;cout<<n-k*m;return 0;
}
5.L1-075 強迫癥
#include<iostream>
#include<vector>
#include<map>
#include<iomanip>using namespace std;int n,year,mouth;signed main() {cin>>n;year = n/100;mouth = n%100;if (year < 100) year = (year < 22 ?2000 :1900) +year;cout<<year<<"-"<<setw(2)<<setfill('0')<<mouth<<endl; return 0;
}
6.L1-076 降價提醒機器人
#include<iostream>
#include<vector>
#include<map>
#include<iomanip>using namespace std;int n;
double price,current_price;signed main() {cin>>n>>price;for(int i=0;i<n;i++) {cin>>current_price;if (current_price < price) cout<<"On Sale! "<<fixed<<setprecision(1)<<current_price<<endl;} return 0;
}
7.L1-077 大笨鐘的心情
#include<iostream>
#include<vector>
#include<map>
#include<iomanip>using namespace std;const int N = 24;
int times;
vector<int> time_mood;
signed main() {for(int i=0;i<N;i++) {cin>>times;time_mood.push_back(times);}while(cin>>times) {if (!(0<=times && times <= 23)) break;if (time_mood[times] > 50) cout<<time_mood[times]<<" Yes";else cout<<time_mood[times]<<" No";cout<<endl;}return 0;
}
8.L1-078 吉老師的回歸
解析:
使用vector記錄要做的題目列表,然后輸出下標為k時的題目即可
注意如果k剛好是總待做題目,那么應該直接輸出AK的文字
#include<iostream>
#include<vector>
#include<map>
#include<iomanip>using namespace std;int n,k;
string topic;
string target_1 = "qiandao";
string target_2 = "easy";
vector<string> out_str;signed main() {cin>>n>>k;getchar();for(int i=0;i<n;i++) {getline(cin,topic);if(topic.find(target_1) == string::npos && topic.find(target_2) == string::npos ) {out_str.push_back(topic);}}// 注意k和題目數量n一致 if (!out_str.empty() && k < out_str.size()) cout<<out_str[k]<<endl;else cout<<"Wo AK le";return 0;
}
9.L1-079 天梯賽的善良
#include<iostream>
#include<vector>
#include<map>
#include<iomanip>
#define int long long
using namespace std;map<int,int> my_map;
int n,score;
signed main() {cin>>n;for(int i=0;i<n;i++) {cin>>score;my_map[score] ++;}
// for(auto it:my_map) {
// cout<<it.first<<" "<<it.second<<endl;
// }if (!my_map.empty()) {auto first_ele = my_map.begin();auto last_ele = my_map.rbegin(); // 反向迭代器,返回低地址元素。 如果使用正向迭代器,則需要last_ele -- cout<<first_ele->first<<" "<<first_ele->second<<endl;cout<<last_ele->first<<" "<<last_ele->second<<endl;}return 0;
}
10.L1-080 乘法口訣數列
解析:
注意是前方每個數字都要經歷相乘得到結果放在結尾,所以使用vector會比較好
另外考慮到0會短路while,所以要對運算結果為0的數進行特判加進去
#include<iostream>
#include<vector>
#include<map>
#include<iomanip>
#define int long long
using namespace std;vector<int> res;
int a_1,a_2,k;vector<int> tmp;
signed main() {cin>>a_1>>a_2>>k;res.push_back(a_1); res.push_back(a_2);int current_index = 2;while(res.size() < k) {int sum = res[current_index - 1] * res[current_index - 2];if (sum) while(sum) tmp.push_back(sum%10),sum/=10;else tmp.push_back(0);while(!tmp.empty()) {res.push_back(tmp.back());tmp.pop_back();} current_index ++;}for(int i=0;i<k;i++) {if(i) cout<<" ";cout<< res[i];}return 0;
}