第一题:



第一题的话我觉得对于刚入门的小白问题也不大,但就是要注意两个细节:10的16次方得用long long(int肯定不行,long的话没试过,但感觉有风险)。还有就是只能写2*a>b,千万不要写a>b/2,原因很简单,就是因为整数除法会向下取整。
示例代码(仅供参考):
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
long long a,b;
cin>>a>>b;
if (2*a>b) {
cout<<"Too Tang";
}
else{
cout<<"Not Tang";
}
return 0;
}
第二题:


第二题的话读懂题也是相当简单(不信的朋友可以去找一些大模拟题 就知道我为什么这么说了),但这道题其实也有几个易踩坑点:这道题的字符串含有空格,所以我们不能采取常规的cin>>s输入(否则遇到空格就停止读取了,后面的输入都无效了),然后我用的是getline(cin,s)这个方法。还有就是解释一下:for(char c : s){......},这个叫范围for循环,用来遍历字符串s中的每个字符。
示例代码(仅供参考):
cpp
#include<bits\stdc++.h>
using namespace std;
int main() {
string s;
getline(cin, s); //不用cin>>s的原因是,这道题含有空格,而cin>>s遇到空格就要停止读取
for (char c : s) {
if (c>='A'&&c<='Z') {
//在 C++ 中有一个非常重要的规则:当char参与数学运算时,它会被自动"升级"成int
cout<<(char)(c+32);
}
if (c>='a'&&c<='z'||c==' ') {
cout<<c;
}
//注意,删除数字这一操作我们压根就不用管他了,因为我们不输出数字就相当于删除数字了
}
return 0;
}
第三题:


对于第三题而言,其实是一种经典的模板变形题,不知道大家看出来没有。对于将学C语言的大一学弟们而言,你们老师今后肯定会跟你们出一道经典的例题:找出最大数(当然后续还会让你们进行排序,这是你们又将接触到冒泡排序,选择排序,插入排序,快速排序等等等等)。当然,我们言归正传,做这种找最大值的题,我们只需定义一个max(最大值),定义一个current(当前值),二者先置零,一旦我们的current>max,我们就去更新最大值(即把我们的current的值赋给我们的max),然后不断迭代,直到over。
示例代码(仅供参考):
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
int max_len = 0; // 历史最长连续 1 的个数
int current_len = 0; // 当前连续 1 的个数
for(int i=0;i<n;i++) {
int a;
cin>>a;
if (a==1) {
current_len++;
if (current_len>max_len) {
max_len=current_len;
}
}
else {
current_len=0; //
}
}
cout<<max_len<<endl;
return 0;
}
第四题:



第四题的话更简单,只要你会计数,就能做,我就不再介绍这道题了。
示例代码(仅供参考):
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
long long count=0;
long long x;
cin>>n;
string op;
for (int i=1;i<=n;i++) {
cin>>op>>x;
if (op=="in")
count+=x;
if (op=="out")
if (count-x>=0)
count-=x;
cout<<count<<"\n";
}
return 0;
}
第五题:


第五题的话有点意思,做法也有很多。我来说说我的想法:我开了个计数器数组,并初始化为0,因为这道题是经典的**小值域频次统计题,**无脑用计数器数组来做就行了。
示例代码(仅供参考):
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,m;
int cnt[501]={0}; //开一个计数器数组,初始化为全0
cin>>n;
while (n-->0) {
cin>>m;
for (int i=1;i<=m;i++) {
int c;
cin>>c;
cnt[c]++; //对应类别的计数器+1
}
}
int most_id=0;
int max_count=0;
for (int i=1;i<=500;i++) {
if (cnt[i]>max_count) {
max_count=cnt[i];
most_id=i;
}
}
cout<<most_id<<" "<<max_count<<endl;
return 0;
}
第六题:


第六题其实也非常简单。因为他已经明确规定了车牌号码只能是7位,而且他还在提示你快用字符串(因为题中说了允许出现前导零)。
示例代码(仅供参考):
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
while (n-->0) {
string s;
cin>>s;
int sum1 = 0, sum2 = 0;
//前4位平方和
for (int i=0;i<4;i++) { //C++中string的下标是从0开始的
int num=s[i]-'0'; //把字符形式的数字变成真正的整数数字
sum1+=num*num;
}
//后三位立方和
for (int i=4;i<7;i++) {
int num=s[i]-'0';
sum2+=num*num*num;
}
if (sum1==sum2) {
cout<<"Lucky Number"<<endl;
}
else {
cout<<"Normal Number"<<endl;
}
}
return 0;
}