学案(1)

准备

在线测评系统

Codeforces是一个提供在线评测系统的俄罗斯网站。截止2023年,该网站已经拥有超过2,000,000的注册用户。

AtCoder是日本最大的算法竞技网站。提供编程在线比赛、过往比赛提交、在线评测等服务。

准备工作

  1. 安装Code::Blocks

  2. 安装Edge浏览器。

  3. 安装浏览器扩展——篡改猴

  4. 安装脚本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}\)的整数中最小的一个。

*一些结论:

  1. \(x\)为整数且\(x\le\frac{a}{b}\),则\(x\)的取值范围为\(x\le\lfloor\frac{a}{b}\rfloor\)

  2. \(x\)为整数且\(x\ge\frac{a}{b}\),则\(x\)的取值范围为\(x\ge\lceil\frac{a}{b}\rceil\)

  3. \(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\)

  4. 若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;

变量名的规则:

  1. 标识符不能是关键字。
  2. 标识符只能由字母、数字和下划线字符组成。
  3. 标识符必须以字母或下划线开头。不能以数字开头。
  4. 区分大小写。

标识符:用户编程时使用的名字。

练习:判断以下标识符是否可以作为变量名

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;
}

abc178a-Not

abc198a-Div

abc172a-Calc

abc302a-Attack

abc262a-World Cup

abc173a-Payment

取模

计算\(a(a\ge 0)\)除以\(b(b>0)\)的余数:

a%b

也可以表示为\(a-\lfloor\frac{a}{b}\rfloor\cdot b\)

a-a/b*b

abc254a-Last Two Digits

abc235a-Rotate

abc227a-Last Card

条件判断

布尔类型

布尔类型的取值有两种:

  • 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

例题:abc223a-Exact Price

使用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;
}

abc253a-Median?

abc228a-On and Off

abc309a-Nine

abc240a-Edge Checker

判断结果

abc243a-Shampoo

abc245a-Good morning

abc249a-Jogging

分类讨论

abc250a-Adjacent Squares

abc214a-New Generation ABC

abc259a-Growth Record

abc331a-Tomorrow

abc355a-Who Ate the Cake?

abc305a-Water Station

abc233a-10yen Stamp

<题单1-1>

abc326a-2UP3DOW

abc352a-AtCoder Line

abc343a-Wrong Answer

abc318a-Full Moon

<题单1-2>

abc269a-Anyway Takahashi

abc334a-Christmas Present

abc212a-Alloy

abc219a-AtCoder Quiz 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。

重复

abc288a-Many A+B Problems

abc283a-Power

abc320a-Leyland Number

abc221a-Seismic magnitude scales

abc238a-Exponential or Quadratic

枚举

abc281a-Count Down

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] << " ";

数组和

abc272a-Integer Sum

abc351a-The bottom of the ninth

abc349a-Zero Sum Game

abc337a-Scoreboard

abc332a-Online Shopping

存在寻找

abc353a-Buildings

abc317a-Potions

abc300a-N-choice question

abc277a-^{-1}

abc313a-To Be Saikyo

数据过滤

abc347a-Divisible

abc294a-Filter

加工计算

abc346a-Adjacent Product

abc290a-Contest Result

abc307a-Weekly Records

abc330a-Counting Passes

数组操作

abc278a-Shift

abc247a-Move Right

abc248a-Lacked Number

abc268a-Five Integers

abc263a-Full House

<题单1-3>

abc328a-Not Too Hard

abc297a-Double Click

abc275a-Find Takahashi

abc241a-Digit Machine

posted @ 2024-08-22 13:47  Alric  阅读(17)  评论(0编辑  收藏  举报