算法竞赛之入门1: 顺序结构2

目录

0X3F3F3F3F 前言

0X1F 变量

Part 1 变量的定义

Part 2 变量的运算

左移和右移

按位与,或和异或

0X2F 输入

0X3F 练习

例题1

题目描述

输入格式

输出格式

输入输出样例

例题1示例代码

例题2

题目描述

输入格式

输出格式

输入输出样例

说明/提示

例题2示例代码

例题3

题目描述

输入格式

输出格式

输入输出样例

说明/提示

例题3示例代码

0XF 结尾


0X3F3F3F3F 前言

上一篇博客,我们一起学习了输出的知识,今天我们就书接上回,继续来学习输入和变量的知识!

0X1F 变量

Part 1 变量的定义

变量变量,顾名思义,就是可以变化的量,相反的,有一种量叫常量,它的值是不能变化的。

我们先来看看变量的定义:

数据类型 变量名

这里的数据类型,就是变量存储数据的类型,常见有一下几种:

#include <iostream>
using namespace std;
int //整数
long int //长整数
long long int //比上一个还长的整数
float //浮点数
double //存储空间是上一个2倍的浮点数
long double //存储空间比上一个还大的浮点数
short //短标识符

附注:如果要定义常量,前面加一个const 就行。

变量名也有讲究:

1. 只能含有字母,数字和_

2.数字不能在第1位

那么,以下哪些变量命名错误呢?

A. C#
B. C_Sharper
c. C++
d. cpp

答案是A和C

A里面含有#,而C里面含有+。

Part 2 变量的运算

C++库里给出了许多运算:

#include <iostream>
using namespace std;
+ //加
- //减
* //乘
/ //除
>> //右移
<< //左移
& //按位与
| //按位或
^ //按位异或

 我们先来讲讲加减乘除除外的剩下5个运算符:

左移和右移

我们先来讲讲一个数的二进制补码:

//一个数的二进制补码就是这个数除2的余数的倒写,我们先来看看15的2进制补码:
15 / 2 = 7 ...... 1
7 / 2 = 3 ...... 1
3 / 2 = 1 ...... 1
1 / 2 = 0 ...... 1
//再倒序写出来,得知15的2进制补码是1111

基于以上方法,就可以使用位运算了:

//我们现在已经知道了15的2进制补码是1111
//对15左移2位的结果就是:
  1111
 11110
111100
//111100在转化乘10进制就是:
0*1+0*2+1*4+1*8+1*16+1*32=60
//对15右移2位的结果就是:
1111
 111
  11
//11在转化乘10进制就是:
1*1+1*2=3

按位与,或和异或

与左移和右移不一样,它们仨都需要两个操作数,规则如下:

0&0=0&1=1&0=0,1&1=1
0|0=0,1|0=0|1=1|1=1
0^0=1^1=0,1^0=0^1=1

注意:1代表是,0代表否,0和1并不代表两个数,而是两个是2进制补码的两个相同位。

0X2F 输入

输入有两种格式:

<iostream>库里有一个函数:

cin >> 变量;

<cstdio>库里有一个函数:

scanf("代替符",&变量名);

0X3F 练习

我们来看3道例题:

例题1

题目描述

现在需要采购一些苹果,每名同学都可以分到固定数量的苹果,并且已经知道了同学的数量,请问需要采购多少个苹果?

输入格式

输入两个不超过 1000000000 正整数,分别表示每人分到的数量和同学的人数。

输出格式

一个整数,表示答案。

输入输出样例

输入 #1

5 3

输出 #1

15

例题1示例代码

#include <iostream>
using namespace std;
#define int long long int
signed main(){
    int student_number,apple_per_student;
    cin >> student_number >> apple_per_student;
    cout << student_number * apple_per_student;
    return 0;
}

这里要注意一下:2个满int数相乘,积会超int,所以要用long long int。

例题2

题目描述

现在有 t 毫升肥宅快乐水,要均分给 n 名同学。每名同学需要 2 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 3 位),以及一共需要多少个杯子。

输入格式

输入一个实数 t 和一个正整数 nn,使用空格隔开。

输出格式

输出两行。

第一行输出一个三位小数,表示可以获得多少毫升饮料。第二行输出一个正整数,表示一共需要多少个杯子。

输入输出样例

输入 #1

500.0 3

输出 #1

166.667
6

说明/提示

对于所有数据,0≤t≤10000且小数点后不超过 3 位,1≤n≤1000。

例题2示例代码

#include <iostream>
using namespace std;
int main(){
	float a;
	cin>>a;
	int n;
	cin>>n;
	printf("%.3f\n%d",a/n,n*2);
	return 0;
}

这里要用到浮点数的小数位限制,假如要限制n位,代码如下:

printf("%.nf",a);

例题3

题目描述

一个三角形的三边长分别是 a、b、c,那么它的面积为 p(p−a)(p−b)(p−c)​,其中 p=(a+b+c)/2。输入这三个数字,计算三角形的面积,四舍五入精确到 1 位小数。

输入格式

第一行输入三个实数 a,b,c,以空格隔开。

输出格式

输出一个实数,表示三角形面积。精确到小数点后 1 位。

输入输出样例

输入 #1

3 4 5

输出 #1

6.0

说明/提示

数据保证能构成三角形,0≤a,b,c≤1000,每个边长输入时不超过 2 位小数。

例题3示例代码

#include <cmath>
#include <iostream>
using namespace std;
int main(){
	double a,b,c;
	cin>>a>>b>>c;
	double p = (a + b + c) / 2;
	printf("%.1f",sqrt(p * (p-a) * (p-b) * (p-c)));
	return 0;
}

这题要用到的是<cmath>库里的平方根函数,实现如下:

sqrt(n);

注意:sqrt()函数的返回值是浮点数。

0XF 结尾

好啦,到此为止我们顺序结构的内容已经全部学完了,要多多练习。

你们可以点击⬇️链接,里面的题目都能做,加油!

【入门1】顺序结构 - 题单 - 洛谷

下一篇博客地址:算法竞赛之入门2: 分支结构1-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值