准备
在线测评系统
Codeforces是一个提供在线评测系统的俄罗斯网站。截止2023年,该网站已经拥有超过2,000,000的注册用户。
AtCoder是日本最大的算法竞技网站。提供编程在线比赛、过往比赛提交、在线评测等服务。
准备工作
-
安装Code::Blocks。
-
安装Edge浏览器。
-
安装浏览器扩展——篡改猴。
-
安装脚本Atcoder Better!。
认识程序
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a,b;
cin >> a >> b;
cout << a+b;
return 0;
}
程序功能:输入两个整数,程序会输出这两个整数的和。
整数
输出整数
cout << 整数;
使用整数表达式
-
加
+
-
减
-
-
乘
*
-
除(向下取整)
/
(表达向下取整含义时,除数不能是负数,被除数必须是正数)
优先级:先乘除,后加减。括号()
可以改变运算顺序。
*不等式的性质
性质1:不等式两边加同一个数,不等号的方向不变.
若\(a>b\),则\(a+c>b+c\)。
性质2:不等式两边乘同一个正数,不等号的方向不变.
若\(a>b\)且\(c>0\),则\(ac>bc\)。
性质3:不等式两边乘同一个负数,不等号的方向改变.
若\(a>b\)且\(c<0\),则\(ac<bc\)。
*整数除法
a除以b向下取整写作\(\lfloor \frac{a}{b} \rfloor\),表示小于等于\(\frac{a}{b}\)的整数中最大的一个。
a除以b向上取整写作\(\lceil \frac{a}{b} \rceil\),表示大于等于\(\frac{a}{b}\)的整数中最小的一个。
*一些结论:
-
若\(x\)为整数且\(x\le\frac{a}{b}\),则\(x\)的取值范围为\(x\le\lfloor\frac{a}{b}\rfloor\)。
-
若\(x\)为整数且\(x\ge\frac{a}{b}\),则\(x\)的取值范围为\(x\ge\lceil\frac{a}{b}\rceil\)。
-
若\(x\)为整数,则\(\lfloor\frac{a}{b}+x\rfloor=\lfloor\frac{a}{b}\rfloor+x\)且\(\lceil\frac{a}{b}+x\rceil=\lceil\frac{a}{b}\rceil+x\)。
-
若a为非负整数且b为正整数,则\(\lceil\frac{a}{b}\rceil=\lfloor\frac{a+b-1}{b}\rfloor\)。
整数变量
声明一个整数变量:
long long 变量名;
如果在main()
前面加上typedef long long ll;
,可以用下面的代码声明一个整数变量:
ll 变量名;
声明多个变量:
ll 变量名1,变量名2,变量名3,...,变量名n;
变量名的规则:
- 标识符不能是关键字。
- 标识符只能由字母、数字和下划线字符组成。
- 标识符必须以字母或下划线开头。不能以数字开头。
- 区分大小写。
标识符:用户编程时使用的名字。
练习:判断以下标识符是否可以作为变量名
hello
3d
_0_0_
long
LoNg
对整数变量进行赋值:
变量名=整数;
声明整数变量的同时可以对其进行赋值:
ll 变量名=整数;
声明多个变量同理:
ll 变量名1=整数,变量名2=整数,变量名3=整数,...,变量名n=整数;
练习:阅读程序,给出程序的输出结果
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a=1,b=2;
cout << a+b*3+4;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a=3,b=4,c=0;
c=a;
a=b;
b=c;
cout << a*2+b;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a=1,b=1;
ll c=a+b;
a=b+c;
b=c+a;
c=a+b;
a=b+c;
a=a+10;
cout << a;
return 0;
}
输入整数
cin >> 整数变量;
例题:输入两个整数a,b,输出它们的和。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a,b;
cin >> a >> b;
cout << a+b;
return 0;
}
取模
计算\(a(a\ge 0)\)除以\(b(b>0)\)的余数:
a%b
也可以表示为\(a-\lfloor\frac{a}{b}\rfloor\cdot b\)。
a-a/b*b
条件判断
布尔类型
布尔类型的取值有两种:
-
true
表示真,数值为1。 -
false
表示假,数值为0。
声明一个布尔变量:
bool 变量名;
给布尔变量赋非零值时,会转为true(1)。
关系运算符
==
等于
!=
不等于
>
大于
<
小于
>=
大于等于
<=
小于等于
当条件为真时,返回true(1),否则返回false(0)。
逻辑运算符
&&
且:操作数均为true时,结果为true,否则为false。
*并且:用于连接并列的形容词等,表示同时存在。
||
或:操作数均为flase时,结果为false,否则为true。
*或者:用在叙述句里,表示选择关系。
!
非(只有一个操作数):操作数为true时,结果为false;操作数为false时,结果为true。
条件的表达
x大于5且x小于等于9
x>5&&x<=9
x大于等于8或x小于3
x>=8||x<3
练习:
-
x与y的和是正数且x与y的积是负数
-
x在10到20之间,或者在30到40之间
-
x和y中至少有一个3的倍数,并且x+y和x*y中至少有一个是4的倍数
-
x年是闰年
闰年:能被4整除且不能被100整除,或者能被400整除。
if语句
if(条件){
语句;
语句;
...
语句;
}else{
语句;
语句;
...
语句;
}
当条件为真(true)时,程序会执行if大括号内的语句,否则执行else大括号内的语句。
如果只有一条语句,可以简写为:
if(条件)语句;
else 语句;
若想在条件为假(false)时不执行语句,可以将else省略。
常用函数
得到两个数的最大值
max(数,数)
得到多个数的最大值
max({数,数,...,数})
得到两个数的最小值
min(数,数)
得到多个数的最小值
min({数,数,...,数})
交换两个变量的值
swap(变量名,变量名)
求一个数的绝对值
abs(数)
实数\(x\)的绝对值,记为\(\left|x\right|\)。
\( |x|= \begin{cases} x&x>0\\ 0&x=0\\ -x&x<0\\ \end{cases} \)
输出字符串
cout << 字符串;
由双引号包裹的内容为字符串,如"yes"
、"no"
。
三元运算符
条件?X:Y
如果满足条件,表达式的值为X,否则为Y。
yes or no
使用if:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll x;
cin >> x;
if(x%100==0&&x>0)cout << "Yes";
else cout << "No";
return 0;
}
使用三元运算符:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll x;
cin >> x;
cout << (x%100==0&&x>0?"Yes":"No");
return 0;
}
判断结果
分类讨论
<题单1-1>
<题单1-2>
循环
数学知识补充:等差数列
换行
cout << endl;
也可以使用转义字符\n
cout << '\n';
自增和自减
将变量的值+1
变量名++
或者
++变量名
同理,将变量的值-1
变量名--
或者
--变量名
将变量的值+n
变量名+=n
同理,将变量的值-n
变量名-=n
i++和++i的区别(i--和--i同理):
i++是先赋值,然后再自增;++i是先自增,后赋值。
用代码表示就是:
若 a = i++; 则等价于 a=i;i=i+1;
而 a = ++i; 则等价于 i=i+1;a=i;
while循环
while(条件){
语句;
语句;
...
语句;
}
当条件满足时,会反复执行大括号内的语句。
练习(使用while循环):
-
无限输出
hello
-
输出10次
hello
-
按顺序输出1到100的所有数
-
按顺序输出100到1的所有数
-
从小到大输出1到100的所有是7的倍数的奇数
for循环
for(初始化语句;条件;主体结束执行语句){
语句;
语句;
...
语句;
}
for循环开始前会执行初始化语句
。
在满足条件
时,循环会一直运行大括号内的语句。
每运行完一次大括号内的语句时,会执行一次主体结束执行语句
。
初始化语句
、条件
、主体结束执行语句
均可以省略,省略条件
时,循环会一直进行下去。
练习(使用for循环):
-
无限输出
hello
-
输出10次
hello
-
按顺序输出1到100的所有数
-
按顺序输出100到1的所有数
-
从小到大输出1到100的所有是7的倍数的奇数
循环控制语句
退出当前循环:
break;
跳过此次循环的剩余部分:
continue;
变量的作用域
局部变量:在函数或一个代码块内部声明的变量。只能被函数内部或者代码块内部的语句使用。
全局变量:在所有函数外部定义的变量。全局变量的值在程序的整个生命周期内都是有效的。
声明全局变量时,变量的初始值为0。
重复
abc221a-Seismic magnitude scales
abc238a-Exponential or Quadratic
枚举
abc340a-Arithmetic Progression
数组
数组可以用来声明多个相同类型的变量
声明\(N\)个整数变量的方法:
ll 数组名[N];
声明\(N\)个布尔变量同理:
bool 数组名[N];
用以上方法声明数组后,可以使用的变量为:
数组名[0]
、数组名[1]
、数组名[2]
、...、数组名[N-2]
、数组名[N-1]
,共\(N\)个变量。
注意:这里的\(N\)是常量,不能是变量。
常量:在程序执行期间不会改变的固定值。
整数常量的声明:
const ll 常量名=整数;
案例:输入正整数\(n\),以及\(n\)个整数:\(a_1,a_2,a_3,...,a_n\)。将它们倒序输出(两个数之间用空格隔开)。
ll n,a[N];
cin >> n;
for(ll i=1;i<=n;i++)cin >> a[i];
for(ll i=n;i>=1;i--)cout << a[i] << " ";
数组和
abc351a-The bottom of the ninth