杭州X01 8月第一次OI讲解(1)
2023-08-08 22:02:26
发布于:上海
大家OI测试都考完了,做出来了吗?今天我来给大家发几道难题解析吧
这次考试难题占比较大的是字符串操作以及数组和循环语句
本人挑了五道题,其他的大家可以评论在下面,我会进行补充
注:这里只放了3题,剩下两题在(2)里面
首先是第一题:水桶装填
咱们不着急看代码,先分析一下思路:
这道题考研的是大家对分支语句和循环输入的能力。
我们每次只需要定义一个变量,用初始值为零的求和变量进行累加,最后进行判断就可以了。
直接上代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,c;//定义一个变量n代表水桶最大的大小,m代表输入数量的个数,c表示输入的数
cin>>n>>m;//输入
int s=0; //定义初始值为0的计数器
for(int i=1;i<=m;i++){ //循环输入
cin>>c;
s+=c;//累加
}
//判断是否溢出
if(s>n) cout<<"Overflows";
else cout<<"Unspilled";
return 0;
}
接下来是第二题:曼哈顿距离
这一题首先我们需要使用到的是
#include<cmath>
这个库里面有绝对值函数abs
就比如说:
abs(1-2) 就会输出1
abs(2-1) 就会输出1
那么,这道题用上这个函数就十分简单了,直接上代码:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int a,b,c,d;
cin>>a>>b>>c>>d;
cout<<abs(a-c)+abs(b-d);
return 0;
}
本篇最后一道题:争夺转转椅
讲点题外话:这道题是我出的,大家肯定都做出来了吧,应该没有王老师的那么难
这道题唯一需要注意的是输入时的带空格输入
那使用string是这样写
getline(cin,str);
使用char是这样写(str变量要定义长度了)
fgets(str,1005,stdin);//更简短一点
反转的话要用循环语句也可以,在👇下面有,这里在介绍一个反转函数,本人喜欢用string,也好像只有string能行,代码如下:
reverse(str.begin(),str.end());
介绍完了以后,咱不说别的,直接上代码:
#include<bits/stdc++.h>
using namespace std;
const int mlen = 2e3+10;//定义字符串的最大长度
int main(){
freopen("kunkun.in","r",stdin);
freopen("kunkun.out","w",stdout);
char k[mlen];
fgets(k,mlen,stdin);//带空格输入字符
int len = strlen(k);//k的真实长度
for(int i=len-1;i>=0;i--){ cout << k[i]; } //反向输出字符
fclose(stdin);
fclose(stdout);
return 0;//好习惯
}
剩下的请看下一篇
全部评论 2
第七行应该是考验吧(你打的是“考研”)
2023-08-09 来自 浙江
1大家重新检测的时候别忘freopen()
2023-08-08 来自 上海
1支持我们的肖老师!
2023-08-08 来自 浙江
1
有帮助,赞一个