swust_2020卓越班选拔


前言:代码仅供参考,不是最优代码,存在问题的话,请指正,还有就是题目顺序搞忘了,名字只大体记得。。。


时间A+B

大意:给你两个时间相加,简单模拟时间的运算

#include<bits/stdc++.h>
using namespace std;
typedef struct time{
	int h;
	int m;
	int s;
}ti;
int main(){
	ti t1, t2;
	while(cin>>t1.h>>t1.m>>t1.s>>t2.h>>t2.m>>t2.s){
		ti t3;
		t3.h=0;t3.m=0;t3.s=0;
		t3.s=t1.s+t2.s;
		if(t3.s>=60){
			t3.m+=1;t3.s-=60;
		}
		t3.m=t3.m+t1.m+t2.m;
		if(t3.m>=60){
			t3.h+=1;t3.m-=60;
		}
		t3.h=t1.h+t2.h+t3.h;
		if(t3.h<10){
			cout<<"0";
		}
		cout<<t3.h<<":";
		if(t3.m<10){
			cout<<"0";
		}
		cout<<t3.m<<":";
		if(t3.s<10){
			cout<<"0";
		}
		cout<<t3.s<<"\n";			
	}	
}

去重数

大意 去除相同的数。。
因为是在100内,所以直接开个数组标记一下就行了,不用多想

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	while(cin>>n){
		int a[20000]={0},p[101]={0};
		for(int i=0;i<n;i++){
			cin>>a[i];
		}
		for(int i=0;i<n;i++){
			if(p[a[i]]==0){
				cout<<a[i]<<" ";
				p[a[i]]=1;	
			}	
		}
		cout<<"\n";
	}
}

二进制数1

大意 把十进制数转换位二进制,数1的出现次数

#include<bits/stdc++.h>

using namespace std;
int main(){
	int n;
	cin>>n;
	int j=0;
	stack<int>m;
	while(n){
		m.push(n%2);
		n/=2;
	}
	while(!m.empty()){
		if(m.top()==1){
			j++;
		}
		m.pop();
	}
	cout<<j;
}

细菌繁殖

大意 数学规律题,找规律
int sum=0;int j=1;
while(–n){
sum+=j;
j+=2;
}
sum=sum*2+j;
这个就是规律
我是根据这个图直接翻译过来的`

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;

	int sum=0;int j=1;
	while(--n){
		sum+=j;
		j+=2;
	}
	sum=sum*2+j;
	cout<<sum<<"\n";
}

看邮件

大意 就是进行3种操作,自己模拟几组数据,就容易发现
我们尽量去找相邻的距离为1或为2,
while(p[i+1]==1||p[i+2]==1){
if(p[i+1]==1){
j+=1;i++;//j为时间
}
if(p[i+2]==1){
j+=2;i+=2;
}
}
`如果没得就退出去找,这个时候浪费时间最大
j+=2;

从头到尾这样找一下就可以了
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	while(n--){int j=0;int flag=1;
	int z;	cin>>z;
	int p[1002]={0};
	for(int i=0;i<z;i++){
		cin>>p[i];
	}
	for(int i=0;i<z;i++){
		if(p[i]==1){
			j+=2;flag=0;
			while(p[i+1]==1||p[i+2]==1){
			if(p[i+1]==1){
				j+=1;i++;
			}
			if(p[i+2]==1){
				j+=2;i+=2;
			}				
				
			}
		}
	}
	if(flag==1){
		cout<<j<<"\n";
	}
	else cout<<j-1<<"\n";
	}
}

打老鼠

大意 就是依次感觉老鼠出现的循序把洞堵了,
这个题用队列会特别简单
每次把洞丢出去判断是否封,如果不封就把它放在队尾即可
。。。。修改一下 发现之前代码发错了
比赛时代码找不到了,就把以前的代码发一下;

#include<iostream>
#include<queue>
using namespace std;
int main(){
	int n,m;cin>>n>>m;
	queue<int>que;
	//创造环 
	for(int i=0;i<n;i++){
 		que.push(i);
	}
	//题目说第一个不填 
	int tmp=que.front();que.pop();
	que.push(tmp);
	//	
	//开始填 
	while(--n){
	j=m-1;//每隔j个	
	while(j--){
		int tmp=que.front();
		que.pop();
		que.push(tmp);
	}
		que.pop();//填 
	}
	cout<<que.front()<<"\n";	
}

逃跑的蠕虫

大意 就是以前的移到小学题 一直减 加 距离d 判断什么时候d<=0
即可

#include<bits/stdc++.h>

using namespace std;
int main(){
	int n,u,d;
	while(cin>>n>>u>>d&&n&&u&&d){int j=0;
		while(n){
			n-=u;j++;
			if(n<=0){
				break;
			}
			n+=d;j++;
		}
		cout<<j<<"\n";
	}
}

找重复出现的字母

大意 就如题。。。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	string a;cin>>a;
	int b[270]={0};
	for(int i=0;i<a.size();i++){
		b[a[i]-'a']++;
	}
	int max=0,p=0;
	for(int i=0;i<27;i++){
		if(b[i]>max){
			max=b[i];
			p=i;
		}
	}
	printf("%c",p+'a');
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值