一、多组案例
1、多组案例的题目用语
在【输入】中说明:一个正整数 n,表示测试案例的数量......
表达的含义:需要循环 n 遍,每遍循环中要输入一组案例,计算后输出结果。
【例 1】A+B=?
【描述】
输出两个整数的和
【输入】
第 1 行是一个正整数 n,表示测试样例的数量。
从第 2~第 n+1 行,每行为一组测试数据,包含两个整数,用空格相隔。
分析:第 1 行的描述说明这是多组案例的题目。第 2~n+1 行,这一共是 n 行,每行一组案
例。题目还说明了输入的格式:两个整数。
【输出】
针对每行测试数据,输出这行两个整数的和,以换行符相隔。
分析:每组案例,要求输出两个整数的和。题目还说明了输出的格式:输出总和后要换
行。
【样例输入】
2
1 2
3 4
分析:样例中 2 表示有 2 组案例,其中第一组案例是 1 和 2,第二组案例是 3 和 4。
【样例输出】
3
7
分析:第一组案例中 1+2=3,第二组案例中 3+4=7。
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
while(n--)
{
int a, b;
cin >> a >> b;
cout << a + b << endl;
}
return 0;
}
分析:while(n--)表示循环 n 次,功能等价于 for (int i = 0; i < n; i++)
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin >> n;
while(n--)
{
double a;
cin >> a;
cout << abs(a) << endl;
}
return 0;
}
说明:abs 是绝对值函数
分析:多组样例的题目中,开头几乎都是 int n; cin>>n; while(n--){...},每组案例的处理在
大括号里写。
注:定义一个布尔型变量flag并初始化为真(true)。
bool flag这是编程中一种常用的标志变量。举例如下:
如果要在一堆元素中选择一个关键字值最小的,逐个判断,这个时候我们可以用flag作为一个标志变量。当你判断每一个元素的时候,先将flag = 1;发现其并不是最小的,那么将它置为0。
二、数组应用:质数判定
质数:如果一个大于 1 的正整数,只能被 1 和自身整除,则称为质数,又叫素数。
【例 3】输入一个正整数,如果是质数则输出 Yes,否则输出 No。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a;
cin >> a;
bool f = true;
if (a < 2)
{
f = false;
}
for (int i = 2; i <= sqrt(a); i++)
{
if (a % i == 0)
{
f = false;
break;
}
}
if (f)
{
cout << "Yes";
}
else
{
cout << "No";
}
return 0;
}
说明:f 是一个 bool 类型变量,标志 a 是否为质数。开始的时候假设 a 是质数,如果 a 小于
2,则 a 肯定不是质数,f 改为 false;如果 a 能被 2 到√𝑎之间任意一个整数整除,则 a 肯定
不是质数,f 改为 false。如果最终 f 仍为 true,说明 a 是质数
三、知识补遗
1、long long int
一种长整数类型,占 8 个字节空间,可以表示大约±9 × 10 18范围内的整数数据。当 int 类型无法存放时,可以考虑 long long int。
【例 4】输入 10 个整数,输出这些整数的乘积(保证在 long long int 范围内)
#include<iostream>
using namespace std;
int main()
{
long long int mul = 1;
for (int i = 0; i < 10; i++)
{
int a;
cin >> a;
mul *= a;
}
cout << mul;
return 0;
}
2、unsigned
用于修饰 int、char 等类型,表示无符号数,即二进制编码的最高位 1 不表示负数。
char 的范围是-128~127,unsigned char 的范围是 0~255;
int 的范围是−2 31~2 31 − 1, unsigned int 的范围是0~2^32 − 2^31。
3、溢出
当数值超出一种变量类型的存储范围时,发生溢出现象。
【例 5】以下代码发生了溢出现象,a 的取值范围是 0~255,a--后的 a 值-1 超出了范围, 从-1 变到了取值范围另一端的 255。故输出结果是 255。
#include<iostream>
using namespace std;
int main()
{
unsigned char a = 0;
a--;
cout << (int)a;
return 0;
}
4、const(常数,常量)
用于修饰 int、char 等类型,表示常量,即不可改变的值。
常量必须在定义时初始化, 随后再也不可以修改常量的值。
#include<iostream>
using namespace std;
int main()
{
const double pi = 3.14;
int r;
cin >> r;
cout << pi * r * r;
return 0;
}
5、转义符
有些字符无法直接打出,需要通过转义符的形式表示。常见的转义符有:
6、三目运算符
由运算符?和:,以及三个操作数凑成的一个运算符。
#include<iostream>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b;
c = a > b ? a : b;
cout << c;
return 0;
}
代码中右值 a > b ? a : b 的意思是,如果 a>b 为 true,那么该值为:前的 a;如果 a>b
为 false,那么该值为:后的 b。故 c = a > b ? a : b 整句话的意思是把 a 和 b 中的较大值赋
给 c。这句话等价于:
if (a > b)
{
c = a;
}
else
{
c = b;
}