前言:代码仅供参考,不是最优代码,存在问题的话,请指正,还有就是题目顺序搞忘了,名字只大体记得。。。
时间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');
}