目录
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;
}