A题:这是一道A+B的变形,A-B。
#include <bits/stdc++.h>
using namespace std;
int a,b;
int main()
{
cin>>a>> b;
cout<<a-b<<endl;
return 0;
}
B题:这是一道考察if判断的题,只需要判断a属于哪一个阶段,输出对应答案。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
if(a<100)cout<<"00";
else if(a<1000)cout<<0<<a/100;
else if(a<=5000)cout<<a/100;
else if(a<=30000)cout<<a/1000+50;
else if(a<=70000)cout<<(a/1000-30)/5+80;
else cout<<"89";
cout<<endl;
}
C题:
题目给出了风向和风程,求出方位和级数。
方位怎么求 :
题目给出了风向,风向的取值决定了方位,直接暴力即可。(如下图表所示)
风速怎么求 :
题目说 6060 秒的风程,可以求出 11 秒的风程,根据每秒的风程可以求出级数。
#include<bits/stdc++.h>
using namespace std;
int a, t, v;
int main(){
cin>>a>>t; //风向和风程
int fast=t/6;
//求出每10秒的风程(设为10秒,是因为后面就不用打小数了)
if (t % 6 >= 3) fast++; //四舍五入string s;
if (a <= 112) s = "N";
else if (a<=337) s = "NNE";
else if (a<=562) s = "NE";
else if (a<=787) s = "ENE";
else if (a<= 1012) s = "E";
else if (a<= 1237) s = "ESE";
else if (a<= 1462) s = "SE";
else if (a<= 1687) s = "SSE";
else if (a<= 1912) s = "S";
else if (a<= 2137) s = "SSW";
else if (a<= 2362) s = "SW";
else if (a<= 2587) s = "WSW";
else if (a<= 2812) s = "W";
else if (a<= 3037) s = "WNW";
else if (a<= 3262) s = "NW";
else if (a<= 3487) s = "NNW";
else s = "N"; //根据风向求出方位
if (fast <= 2) v = 0;
else if (fast <= 15) v = 1;
else if (fast <= 33) v = 2;
else if (fast <= 54) v = 3;
else if (fast <= 79) v = 4;
else if (fast <= 107) v = 5;
else if (fast <= 138) v = 6;
else if (fast <= 171) v = 7;
else if (fast <= 207) v = 8;
else if (fast <= 244) v = 9;
else if (fast <= 284) v = 10;
else if (fast <= 326) v = 11;
else v = 12;//求出级数
if (!v) puts("C 0");
//级数为0需要特判
else cout << s << ' ' << v << endl;
}
D题:
如题意,我们需要整理时间。
对于舍去,我们只需要判断个位,减去或者加上相应的数即可。
而对于某些结束时间的数字,如 59 这类,舍入后变成了 60。这个时候需要进位,否则就会出现 11:60。
对于合并操作,我们按照起始时间排序,记录当前段的左右端点。
若当前段的结束时间早于下一段的起始时间,则直接输出。否则则合并这两段区间。
#include<bits/stdc++.h>
using namespace std;
int n;
struct node
{
int st,la;//起点终点
};
node e[10000000];
bool cmp(node a,node b)
return a.st<b.st;
}
void gout(int x,int y)
{//输出,因为要输出前缀0,所以特判。
if(x<10)cout<<"0";//按位输出前缀0
if(x<100)cout<<"0";
if(x<1000)cout<<"0";
printf("%d-",x);
if(y<10)cout<<"0";
if(y<100)cout<<"0";
if(y<1000)cout<<"0";
printf("%d\n",y);
}
intmain()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d-%d",&e[i].st,&e[i].la);//输入时间//以下为特判
if(e[i].st%10>0&&e[i].st%10<5){
e[i].st-=e[i].st%10;
}
if(e[i].st%10>5){
e[i].st=e[i].st-e[i].st%10+5;
}
if(e[i].la%10>0&&e[i].la%10<5){
e[i].la=e[i].la-e[i].la%10+5;
}
if(e[i].la%10>5){
e[i].la=e[i].la-e[i].la%10+10;
if(e[i].la%100==60)e[i].la=e[i].la-60+100;//进位
}
}
sort(e+1,e+n+1,cmp);
int l=e[1].st,r=e[1].la;//记录起点终点
for(int i=2;i<=n;i++){
if(r<e[i].st){//特判两种情况
gout(l,r);
l=e[i].st,r=e[i].la;
continue;
}
if(r>=e[i].st&&r<=e[i].la){
r=e[i].la;
continue;
}
}
gout(l,r);//输出最后一段
return 0;
}