目录
1.倍数
读取两个正整数值 A 和 B。
如果其中一个是另一个的整数倍,则输出 Sao Multiplos,否则输出 Nao sao Multiplos。
输入格式
共一行,两个整数 A 和 B。
输出格式
按题目所述,输出结果。
数据范围
0<A,B<100
输入样例:
6 24
输出样例:
Sao Multiplos
#include <iostream>
using namespace std;
int main ()
{
int a, b;
cin >> a >> b;
if(!(a % b) || !(b % a)) cout << "Sao Multiplos" << endl;
else cout << "Nao sao Multiplos" << endl;
return 0;
}
2.零食
某商店出售 5 种零食,零食编号为 1∼5。
5 种零食的价目表如下所示:
零食种类 价格
零食 1 R$ 4.00
零食 2 R$ 4.50
零食 3 R$ 5.00
零食 4 R$ 2.00
零食 5 R$ 1.50
现在给定某种零食的编号和数量,请你计算总价值是多少。
输入格式
输入包含两个整数 x 和 y,其中 x 为零食编号,y 为零食数量。
输出格式
输出格式为 Total: R$ X,其中 X 为总价值,保留两位小数。
数据范围
1≤x≤5,
1≤y≤100
输入样例:
3 2
输出样例:
Total: R$ 10.00
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
if(a == 1) printf("Total: R$ %.2f", b * 4.00);
else if(a == 2) printf("Total: R$ %.2f", b * 4.50);
else if(a == 3) printf("Total: R$ %.2f", b * 5.00);
else if(a == 4) printf("Total: R$ %.2f", b * 2.00);
else if(a == 5) printf("Total: R$ %.2f", b * 1.50);
return 0;
}
改进版,把价格设置为一个变量,看上去更像老程序员写出来的代码
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
double price;
if(a == 1) price = 4.00;
else if(a == 2) price = 4.50;
else if(a == 3) price = 5.00;
else if(a == 4) price = 2.00;
else if(a == 5) price = 1.50;
printf("Total: R$ %.2f", b * price);
return 0;
}
3.区间
给定一个浮点数,请你判断该数字属于以下哪个区间:[0,25],(25,50],(50,75],(75,100]。
如果给定的数值小于 0 或大于 100,则程序输出 Fora de intervalo,表示超出范围。
开区间 (a,b):在实数 a 和实数 b 之间的所有实数,但不包含 a 和 b。
闭区间 [a,b]:在实数 a 和实数 b 之间的所有实数,包含 a 和 b。
输入格式
输入一个浮点数。
输出格式
判断输入数值位于哪个区间,按格式 Intervalo x 输出,其中 x 为区间范围 [0,25],(25,50],(50,75],(75,100] 中的一个。
如果数值位于所有区间之外,则输出 Fora de intervalo。
输入样例:
25.01
输出样例:
Intervalo (25,50]
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
double a;
cin >> a;
string qujian;
if(a > 100 || a < 0) cout << "Fora de intervalo" << endl;
else
{
if(a <= 100 && a > 75) qujian = "(75,100]";
else if(a <= 75 && a > 50) qujian = "(50,75]";
else if(a <= 50 && a > 25) qujian = "(25,50]";
else if(a <= 25 && a >= 0) qujian = "[0,25]";
cout << "Intervalo " << qujian << endl;
}
return 0;
}
4.三角形
读取三个浮点数 A,B 和 C 并验证是否可以用它们形成三角形。
如果可能,则计算并输出三角形的周长:
Perimetro = XX.X
如果不可能,则计算并输出以 A 和 B 为底以 C 为高的梯形面积:
Area = XX.X
输入格式
共一行,包含三个浮点数 A,B,C。
输出格式
按题目描述格式,输出答案,答案保留一位小数。
数据范围
0<A,B,C<100.0
输入样例1:
6.0 4.0 2.0
输出样例1:
Area = 10.0
输入样例2:
6.0 4.0 2.1
输出样例2:
Perimetro = 12.1
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double a, b, c;
cin >> a >> b >> c;
if(a + b > c && a + c > b && b + c > a)
printf("Perimetro = %.1f", a + b + c);
else printf("Area = %.1f", (a + b) * c / 2.0);
return 0;
}
5.游戏时间
读取两个整数 A 和 B,表示游戏的开始时间和结束时间,以小时为单位。
然后请你计算游戏的持续时间,已知游戏可以在一天开始并在另一天结束,最长持续时间为 24 小时。
如果 A 与 B 相等,则视为持续了 24 小时。
输入格式
共一行,包含两个整数 A 和 B。
输出格式
输出格式为 O JOGO DUROU X HORA(S),其中 X 为游戏持续时间。
数据范围
0≤A,B≤23
输入样例1:
16 2
输出样例1:
O JOGO DUROU 10 HORA(S)
输入样例2:
0 0
输出样例2:
O JOGO DUROU 24 HORA(S)
输入样例3:
2 16
输出样例3:
O JOGO DUROU 14 HORA(S)
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
if(a == b) cout << "O JOGO DUROU 24 HORA(S)" << endl;
else if(a < b) printf("O JOGO DUROU %d HORA(S)\n", b - a);
else if(a > b) printf("O JOGO DUROU %d HORA(S)\n", b + 24 - a);
return 0;
}
6.加薪
ABC 公司决定给员工加薪,加薪情况如下所示:
薪水 涨薪幅度
0 - 400.00 15%
400.01 - 800.00 12%
800.01 - 1200.00 10%
1200.01 - 2000.00 7%
超过 2000.00 4%
读取员工的工资,计算并输出员工的新工资,以及员工增加的收入和涨薪幅度。
输入格式
共一行,包含一个保留两位小数的浮点数。
输出格式
输出格式如下所示:
第一行输出 Novo salario: X,X 表示员工新工资,保留两位小数。
第二行输出 Reajuste ganho: Y,Y 表示员工增加的具体收入数值,保留两位小数。
第三行输出 Em percentual: Z,Z 表示涨薪幅度,注意用百分比表示。
数据范围
0≤原工资≤2500.00
输入样例:
400.00
输出样例:
Novo salario: 460.00
Reajuste ganho: 60.00
Em percentual: 15 %
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double yuan_gongzi;
cin >> yuan_gongzi;
double zengjia_gongzi, bili;
if(yuan_gongzi > 0 && yuan_gongzi <= 400.00)
{
bili = 0.15;
zengjia_gongzi = yuan_gongzi * bili;
}
else if(yuan_gongzi >= 400.01 && yuan_gongzi <= 800.00)
{
bili = 0.12;
zengjia_gongzi = yuan_gongzi * bili;
}
else if(yuan_gongzi >= 800.01 && yuan_gongzi <= 1200.00)
{
bili = 0.1;
zengjia_gongzi = yuan_gongzi * bili;
}
else if(yuan_gongzi >= 1200.01 && yuan_gongzi <= 2000.00)
{
bili = 0.07;
zengjia_gongzi = yuan_gongzi * bili;
}
else if(yuan_gongzi >= 2000.01)
{
bili = 0.04;
zengjia_gongzi = yuan_gongzi * bili;
}
int bili2;
bili2 = bili * 100;
printf("Novo salario: %.2f\n", zengjia_gongzi + yuan_gongzi);
printf("Reajuste ganho: %.2f\n", zengjia_gongzi);
printf("Em percentual: %d %\n", bili2);
return 0;
}
7.动物
给定你三个葡萄牙语单词,这些词将根据下表从左到右定义一个动物。请你确定并输出这个动物的名称。
输入格式
根据上表,输入包含三个单词,每行一个,用以识别动物,单词由小写字母构成。
输出格式
输出识别出的动物的名称。
输入样例:
vertebrado
mamifero
onivoro
输出样例:
homem
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string s1, s2, s3;
cin >> s1 >> s2 >> s3;
if(s1 == "vertebrado")
{
if(s2 == "ave")
{
if(s3 == "carnivoro") cout << "aguia" << endl;
else if(s3 == "onivoro") cout << "pomba" << endl;
}
else if(s2 == "mamifero")
{
if(s3 == "onivoro") cout << "homem" << endl;
else if(s3 == "herbivoro") cout << "vaca" << endl;
}
}
else if(s1 == "invertebrado")
{
if(s2 == "inseto")
{
if(s3 == "hematofago") cout << "pulga" << endl;
else if(s3 == "herbivoro") cout << "lagarta" << endl;
}
else if(s2 == "anelideo")
{
if(s3 == "hematofago") cout << "sanguessuga" << endl;
else if(s3 == "onivoro") cout << "minhoca" << endl;
}
}
return 0;
}
8.选择练习1
读取 4 个整数值 A,B,C 和 D。
如果四个整数同时满足以下条件:
B 大于 C。
D 大于 A。
C 和 D 的总和大于 A 和 B 的总和。
C 和 D 是正值。
A 是偶数。
则输出 Valores aceitos,否则,输出 Valores nao aceitos。
输入格式
输入占一行,包含四个整数 A,B,C,D。
输出格式
如果输入数值满足题目条件则输出 Valores aceitos,否则输出 Valores nao aceitos。
数据范围
−100≤A,B,C,D≤100
输入样例:
5 6 7 8
输出样例:
Valores nao aceitos
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
if(b > c && d > a && c + d > a + b && c > 0 && d > 0 && a % 2 == 0) cout << "Valores aceitos" << endl;
else cout << "Valores nao aceitos" << endl;
return 0;
}
9.DDD
给定一个整数,请根据下表确定并输出其对应的城市名称:
如果输入数字不在上表中,则输出 DDD nao cadastrado。
输入格式
共一行,包含一个整数。
输出格式
输出对应城市名称,如果没有对应城市名称,则输出 DDD nao cadastrado。
输入样例:
11
输出样例:
Sao Paulo
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a;
cin >> a;
if(a == 61) cout << "Brasilia" << endl;
else if(a == 71) cout << "Salvador" << endl;
else if(a == 11) cout << "Sao Paulo" << endl;
else if(a == 21) cout << "Rio de Janeiro" << endl;
else if(a == 32) cout << "Juiz de Fora" << endl;
else if(a == 19) cout << "Campinas" << endl;
else if(a == 27) cout << "Vitoria" << endl;
else if(a == 31) cout << "Belo Horizonte" << endl;
else cout << "DDD nao cadastrado" << endl;
return 0;
}
10.点的坐标
给定两个保留一位小数的浮点数 X,Y,用来表示一个点的横纵坐标。
请你判断该点在坐标系中的位置。
输入格式
共一行,包含两个浮点数 X,Y,表示点的横纵坐标。
输出格式
如果点在第一象限,则输出 Q1,在第二象限,则输出 Q2,以此类推。
如果点在原点处,则输出 Origem。
否则,如果点在 x 坐标上,则输出 Eixo X,在 y 坐标上,则输出 Eixo Y。
数据范围
−10.0≤X,Y≤10.0
输入样例1:
4.5 -2.2
输出样例1:
Q4
输入样例2:
0.0 0.0
输出样例2:
Origem
#include <iostream>
using namespace std;
int main()
{
double x, y;
cin >> x >> y;
if(x > 0 && y > 0) cout << "Q1" << endl;
else if(x > 0 && y < 0) cout << "Q4" << endl;
else if(x < 0 && y > 0) cout << "Q2" << endl;
else if(x < 0 && y < 0) cout << "Q3" << endl;
else if(x == 0 && y != 0) cout << "Eixo Y" << endl;
else if(y == 0 && x != 0) cout << "Eixo X" << endl;
else if(x == 0 && y == 0) cout << "Origem" << endl;
return 0;
}
11.三角形类型
读取表示三角形三条边的 3 个浮点数 A,B 和 C 并按降序排列,使 A 边是三边中最大的一边。
接下来,根据以下情况,确定它们可以组成的三角形类型:
如果 A≥B+C,则说明三条边不能构成三角形,请输出:NAO FORMA TRIANGULO
否则,说明三条边可以构成三角形,然后按如下情况输出:
如果A2=B2+C2,请输出:TRIANGULO RETANGULO
如果A2>B2+C2,请输出:TRIANGULO OBTUSANGULO
如果A2<B2+C2,请输出:TRIANGULO ACUTANGULO
如果三个边长度都相同,请输出:TRIANGULO EQUILATERO
如果只有两个边长度相同而第三个边长度不同,请输出:TRIANGULO ISOSCELES
输入格式
共一行,包含三个浮点数 A,B,C。
输出格式
输出 A,B,C 组成的三角形的类型。
注意,上述条件可能满足不止一条,这种情况下将所有类型名称,按题目介绍顺序输出,每行输出一条。
数据范围
0<A,B,C<10.0
输入样例:
7.0 5.0 7.0
输出样例:
TRIANGULO ACUTANGULO
TRIANGULO ISOSCELES
#include <iostream>
using namespace std;
void swap(double& a, double& b);
void cmp(double& a, double& b, double& c);
int main()
{
double A, B, C;
cin >> A >> B >> C;
cmp(A, B, C);
if(A >= B + C) cout << "NAO FORMA TRIANGULO" << endl;
else
{
if(A * A == (B * B + C * C)) cout << "TRIANGULO RETANGULO" << endl;
if(A * A > (B * B + C * C)) cout << "TRIANGULO OBTUSANGULO" << endl;
if(A * A < (B * B + C * C)) cout << "TRIANGULO ACUTANGULO" << endl;
if(A == B && B == C) cout << "TRIANGULO EQUILATERO" << endl;
if((A == B && B != C) || (A == C && B != C) || (B == C && A != C)) cout << "TRIANGULO ISOSCELES" << endl;
}
return 0;
}
void swap(double& a, double& b)
{
double tmp;
if(a < b)
{
tmp = a;
a = b;
b = tmp;
}
}
void cmp(double& a, double& b, double& c)
{
if(a < b) swap(a, b);
if(b < c) swap(b, c);
if(a < b) swap(a, b);
}
12.游戏时间2
读取四个整数 A,B,C,D,用来表示游戏的开始时间和结束时间。
其中 A 和 B 为开始时刻的小时和分钟数,C 和 D 为结束时刻的小时和分钟数。
请你计算游戏的持续时间。
比赛最短持续 1 分钟,最长持续 24 小时。
输入格式
共一行,包含四个整数 A,B,C,D。
输出格式
输出格式为 O JOGO DUROU X HORA(S) E Y MINUTO(S),表示游戏共持续了 X 小时 Y 分钟。
数据范围
0≤A,C≤23,
0≤B,D≤59
输入样例1:
7 8 9 10
输出样例1:
O JOGO DUROU 2 HORA(S) E 2 MINUTO(S)
输入样例2:
7 7 7 7
输出样例2:
O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)
输入样例3:
7 10 8 9
输出样例3:
O JOGO DUROU 0 HORA(S) E 59 MINUTO(S)
'''
方法一:独立计算小时和分钟的差
'''
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
if(a < c)
{
if(b <= d) printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", c - a, d - b);
else if(b > d) printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", c - a - 1, 60 + d - b);
}
else if(a == c)
{
if(b < d) printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", c - a, d - b);
else if(b > d) printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", 24 + c - a - 1, 60 + d - b);
else if(b == d) printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", 24, 0);
}
else if(a > c)
{
if(b <= d) printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", 24 + c - a, d - b);
else if(b > d) printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", 24 + c - a - 1, 60 + d - b);
}
return 0;
}
```cpp
'''
方法二:化成分钟来算
'''
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
int start = a * 60 + b;
int end = c * 60 + d;
int cha = end - start;
if(cha <= 0) cha += 1440;
printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)", cha / 60, cha % 60);
return 0;
}
13. 税
读取一个保留两位小数的浮点数值,表示一个公民的工资。
在公民缴纳个人所得税时,不同收入部分需要缴税的税率也是不同的。
请根据下表确定该公民需要缴纳的个人所得税是多少。
输入格式
共一行,包含一个浮点数。
输出格式
如果公民需要缴税,则输出所需缴纳的税额。输出格式为 R$ X,其中 X 为个税的金额,保留两位小数。
如果公民不需要缴税,则输出 Isento。
数据范围
0≤公民工资≤5000
输入样例1:
3002.00
输出样例1:
R$ 80.36
输入样例2:
1700.00
输出样例2:
Isento
输入样例3:
4520.00
输出样例3:
R$ 355.60
样例解释
对于样例 1,0∼2000.00 部分不用缴税,2000.01∼3000.00 部分按 8% 的税率缴税,共计 1000×8%=80,3000.01∼3002.00 部分按 18% 的税率缴税,共计 2×18%=0.36,合计 80.36。
对于样例 2,公民收入未超过 2000,所以输出 Isento。
对于样例 3,0∼2000.00 部分不用缴税,2000.01∼3000.00 部分按 8% 的税率缴税,共计 1000×8%=80,3000.01∼4500.00 部分按 18% 的税率缴税,共计 1500×18%=270,4500.01∼4520 部分按 28% 的税率缴税,共计 20×28%=5.60,合计 355.60。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double a;
cin >> a;
if(a > 0 && a < 2000.00) printf("Isento");
else if(a > 2000.01 && a < 3000.00) printf("R$ %.2f", (a - 2000) * 0.08);
else if(a > 3000.01 && a < 4500.00) printf("R$ %.2f", (a - 3000) * 0.18 + 1000 * 0.08);
else if(a > 4500.01) printf("R$ %.2f", (a - 4500) * 0.28 + 1500 * 0.18 + 1000 * 0.08);
return 0;
}
14.简单排序
读取三个整数并按升序对它们进行排序。
输入格式
共一行,包含三个整数。
输出格式
首先,将三个整数按升序顺序输出,每行输出一个整数。
然后,输出一个空行。
紧接着,将三个整数按原输入顺序输出,每行输出一个整数。
数据范围
−100≤输入整数≤100
输入样例:
7 21 -14
输出样例:
-14
7
21
7
21
-14
#include <iostream>
using namespace std;
void swap(int& a, int& b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
int main()
{
int a, b, c;
cin >> a >> b >> c;
int A, B, C;
A = a, B = b, C = c;
if(a > b) swap(a, b);
if(b > c) swap(b, c);
if(a > b) swap(a, b);
cout << a << endl << b << endl << c << endl;
cout << endl;
cout << A << endl << B << endl << C << endl;
return 0;
}
15.一元二次方程公式
读取三个浮点数 a,b,c 的值,利用一元二次方程求根公式对方程 ax2+bx+c=0 进行求解。
一元二次方程求根公式为:
x=−b±b2−4ac−−−−−−−√2a
如果 b2−4ac<0 导致方程无解或 a=0,则输出 Impossivel calcular。
输入格式
输入三个浮点数 a,b,c。
输出格式
参照输出格式,输出方程的根,输出结果保留五位小数,如果无解则输出 Impossivel calcular。
两个根可以按任意顺序输出,都算正确。
数据保证不存在只有一个解的情况。
数据范围
−1000.0≤a,b,c≤1000.0
输入样例:
10.0 20.1 5.1
输出样例:
R1 = -0.29788
R2 = -1.71212
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
double a, b, c;
cin >> a >> b >> c;
if(a == 0 || b * b - 4 * a * c < 0) cout << "Impossivel calcular" << endl;
else
{
double tmp = b * b - 4 * a * c;
double x1, x2;
x1 = (-b + sqrt(tmp)) / (2.0 * a);
x2 = (-b - sqrt(tmp)) / (2.0 * a);
printf("R1 = %.5f\n", x1);
printf("R2 = %.5f", x2);
}
return 0;
}
16.平均数3
读取 4 个数字 N1,N2,N3,N4,这 4 个数字都是保留 1 位小数的浮点数,对应于学生获得的 4 个分数。
这 4 个分数的权重分别为 2,3,4,1,请你计算学生成绩的平均值 X 并输出 Media: X。
接下来分为以下三种情况:
如果平均值为 7.0 或更高,则输出 Aluno aprovado.。
如果平均值小于 5.0,则输出 Aluno reprovado.。
如果平均值大于等于 5.0 并且小于 7.0,则输出 Aluno em exame.,并再读取一个数字 Y,然后输出 Nota do exame: Y。接下来重新计算平均值 Z=(X+Y)/2,如果 Z 大于或等于 5.0,则输出 Aluno aprovado.,否则输出 Aluno reprovado.。最后输出 Media final: Z,表示学生的最终成绩。
输入格式
输入中包含四个浮点数,表示学生的四个成绩。
也有部分满足情况 3 的数据,多包含一个浮点数。
输出格式
输出的结果均保留 1 位小数,具体形式参照题目描述和输出样例。
数据范围
0≤输入数据≤10.0
输入样例1:
2.0 4.0 7.5 8.0
6.4
输出样例1:
Media: 5.4
Aluno em exame.
Nota do exame: 6.4
Aluno aprovado.
Media final: 5.9
输入样例2:
2.0 6.5 4.0 9.0
输出样例2:
Media: 4.9
Aluno reprovado.
输入样例3:
9.0 4.0 8.5 9.0
输出样例3:
Media: 7.3
Aluno aprovado.
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double n1, n2, n3, n4, X, Y;
scanf("%lf%lf%lf%lf", &n1, &n2, &n3, &n4);
cin >> Y;
X = (2 * n1 + 3 * n2 + 4 * n3 + n4) / 10;
if(X >= 7.0)
{
printf("Media: %.1lf\n", X);
cout << "Aluno aprovado." << endl;
}
else if(X < 5.0)
{
printf("Media: %.1lf\n", X);
cout << "Aluno reprovado." << endl;
}
else if(X >= 5.0 && X < 7.0)
{
printf("Media: %.1lf\n", X);
cout << "Aluno em exame." << endl;
printf("Nota do exame: %.1f\n", Y);
double Z = (X + Y) / 2.0;
if(Z >= 5.0) cout << "Aluno aprovado." << endl;
else cout << "Aluno reprovado." << endl;
printf("Media final: %.1f", Z);
}
return 0;
}
总结
‘’‘
if(条件1 && 条件2 && ...){}的写法
等价于
if(条件1)
{
if(条件2)
{
...
}
}
’‘’