1. 考点总结
真的,再简单的题目,第一还是审题,不然浪费很多时间在没有意义的地方真的不值得;然后练完才发现今天选的题目没有30+的,都是基础题🐶
题目 | 难度 | 知识点 |
---|---|---|
1005 | 没有难度 | 字符串处理,复习了strcpy |
1006 | 没有难度 | 主要是考察输入输出处理叭 |
1007 | 🎈 | 最大子序列和 |
1008 | 没有难度 | 会c++语法即可(不贴代码了) |
2. 分题题解
2.1 拼写正确
主要是strcpy浅浅卡了一下,总体水题
#include<bits/stdc++.h>
using namespace std;
string num;
int sum=0;
string sum_s;
string table[]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main(){
cin>>num;
for(int i=0;i<num.length();i++){
sum+=(num[i]-'0');
}
sum_s=to_string(sum);
for(int i=0;i<sum_s.length();i++){
if(i)cout<<" ";
cout<<table[sum_s[i]-'0'];
}
return 0;
}
2.2 登录登出
水题目
#include<bits/stdc++.h>
using namespace std;
//找到第一个开门和最后一个锁门的
int sign_in,sign_out;
int N;
char id[17];
int in_hh,in_mm,in_ss,out_hh,out_mm,out_ss;
char in_id[17];
char out_id[17];
int st_time=24*60*60;
int ed_time=0;
int main(){
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%s %d:%d:%d %d:%d:%d",id,&in_hh,&in_mm,&in_ss,&out_hh,&out_mm,&out_ss);
sign_in=in_hh*60*60+in_mm*60+in_ss;
sign_out=out_hh*60*60+out_mm*60+out_ss;
if(sign_in<st_time){
st_time=sign_in;
strcpy(in_id,id);
}
if(sign_out>ed_time){
ed_time=sign_out;
strcpy(out_id,id);
}
}
printf("%s %s",in_id,out_id);
return 0;
}
2.3 最大子序列和
还是属于经典的题目了,难度在于需要给出最大子序列的起始和末尾元素,注意审题,sum<0的时候特判输出
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int>v;
int tsum=0;
int st,ed,sum=-INT_MAX;
int tst;
bool flag=false;
int main(){
//输出最大子序列和,起始的位置的数字,末尾的数字
scanf("%d",&n);
v.resize(n);
for(int i=0;i<n;i++){
scanf("%d",&v[i]);
}
st=v[0];
tst=v[0];
for(int i=0;i<n;i++){
//printf("%d:tsum=%d st=%d\n",i,tsum,st);
if(flag){
flag=false;
tst=v[i];
}
if(tsum+v[i]<0){
tsum=0;
flag=true;
continue;
}else{
tsum+=v[i];
if(tsum>sum){
sum=tsum;
ed=v[i];
st=tst;
}
}
}
if(sum>=0){
printf("%d %d %d",sum,st,ed);
}else{
printf("0 %d %d",v[0],v[n-1]);
}
return 0;
}