算法训练21


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

3. 参考资料

  1. strcpy的用法

文章作者: Gao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gao !
评论
  目录