202603-1 交朋友
题目描述
Alice 班上共有 4 个小朋友,身高分别为 ,其中 Alice 的身高为 。
Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?
输入格式
输入共 4 行,第 行包含一个整数 ,表示班上小朋友的身高。
输出格式
输出 1 行,包含一个整数 ,表示 Alice 想交的朋友的身高。
输入样例
150165135133输出样例
135样例解释
样例 1 中,Alice 身高为 150,第 2、3 个小朋友与 Alice 身高差距为 15,同样最接近,Alice 选较矮的一个即第 3 个身高为 135 的小朋友交朋友。
数据范围
保证 且 互不相同。
代码解析
这道题是一道“打擂台”求最小值的题,不过加了一些难度,是需要让每个数字减掉一个数字的差值去打擂台,而且这个差值有可能小于0,如 165-150=15,135-150=(-15),所以我们需要用差值的绝对值去打擂台,若绝对值相等就拿数字本身去打擂台,如 135 和 165 我们选小的 135
#include <bits/stdc++.h>using namespace std;int main() {
int h1, ans = 1000; cin >> h1; for (int i = 1; i <= 3; i++) { int hi; cin >> hi; int d1 = abs(hi-h1), d2 = abs(ans-h1); if (d1 < d2) ans = hi; else if (d1 == d2 && hi < ans) ans = hi; } cout << ans;
return 0;}如果还没有学过数学函数 abs() 的话,可以定义变量保存差值,判断是否 < 0,如:
int d1 = hi-h1;if (d1 < 0) d1 = -d1;int d2 = hi-h1;if (d2 < 0) d2 = -d2;
202603-2 数字替换
题目描述
Alice 不喜欢数字 4,但觉得数字 8 寓意好,她想把数中的 4 全都替换成 8,若数中不含 4 则无需修改,你能帮帮她吗?
输入格式
输入一行,包含一个整数 ,表示替换前的数。
输出格式
输出一行,包含一个整数 ,表示替换后的数。
输入样例 1
8459045输出样例 1
8859085输入样例 2
123输出样例 2
123数据范围
保证 。
代码解析
如果已经学了字符串,那只需要输入字符串遍历即可,但是一级的考纲不包含字符串,所以最简单的方法就是:
使用字符,依次输入,如果是字符 4 就输出 8,唯一的难点是题目没有给出数字的位数,所以我们可以直接把 cin 作为循环条件(这个技巧是第一次出现,平时几乎很少见,在考场上可能想不到)。
#include <bits/stdc++.h>using namespace std;int main() {
char n; while (cin >> n) { if (n == '4') cout << 8; else cout << n; }
return 0;}第二种解法就是使用数位分离(剥离)的技巧,将每个数字单独提取出来,判断是否为 4,若为 4 则变成 8,再利用进制相关知识,重新组合成新的数字,输出即可。
#include <iostream>using namespace std;int main() {
int A; cin >> A; int B = 0, weight = 1; // 位权:1, 10, 100, ... while (A > 0) { int t = A % 10; if (t == 4) t = 8; A /= 10; // 将处理后的数字乘以其位权,加到结果中 B += t * weight; weight *= 10; // 更新位权 } cout << B << endl;
return 0;}202606-1 去旅行
题目描述
快暑假了,小杨同学正在计划出去旅行,前往目的地的方案多种多样,小杨同学想知道如何前往目的地最便宜。
小杨同学住在 市,旅行目的地是 市,小杨同学前往目的地有三种方案:
- 从 市直飞 市;
- 从 市坐高铁到 市,然后坐飞机到 市;
- 从 市坐高铁到 市,然后坐高铁到 市。
请帮小杨同学求出最便宜的出行方案的价格。
输入格式
输入包含 行,每行一个正整数:
- 第 行的正整数表示「从 市直飞 市」的价格;
- 第 行的正整数表示「从 市坐高铁到 市」的价格;
- 第 行的正整数表示「从 市坐飞机到 市」的价格;
- 第 行的正整数表示「从 市坐高铁到 市」的价格。
输出格式
输出一个正整数,表示 种方式中,最便宜的出行方案的价格。
样例输入 1
999105699588样例输出 1
693样例输入 2
9387样例输出 2
9提示
【样例解释 1】
方案 . 直飞价格为 ;
方案 . 高铁转飞机价格为 ;
方案 . 高铁的价格为 ;
因此最便宜的价格是 。
【样例解释 2】
方案 . 直飞价格为 ;
方案 . 高铁转飞机价格为 ;
方案 . 高铁的价格为 ;
因此最便宜的价格是 。
【数据范围】
所有输入均为正整数,且不超过 。
代码解析
这道题是一道简单的计算后进行大小比较的题目,只需要按照题目给出的方案计算出价格,然后找最小值就可以。
#include <bits/stdc++.h>using namespace std;int main() {
int a, b, c, d; cin >> a >> b >> c >> d; cout << min(a, min(b+c, b+d)); // cout << min({a, b+c, b+d});
return 0;}202606-2 交税
题目描述
根据国家税收相关规定,劳务报酬需要按月预交个税,预交税率如下:
- 劳务报酬不超过 的,不需要预交个税;
- 劳务报酬超过 的,仅超过 的部分按照 (即 )税率预交个税(不超过 的部分不需要预交个税);
例如,月劳务报酬为 ,则按照规则 需要预交个税 。
现在给定小杨同学 个月的月度劳务报酬,请帮小杨同学计算他这 个月应预交个税的总和。
输入格式
输入 行,每行一个浮点数,表示小杨同学 个月中每个月的劳务报酬。
每个浮点数恰好有一位小数。
输出格式
输出 行,一个浮点数,保留两位小数,表示小杨同学 个月应预交个税的总和。
样例输入 1
932.01634.31790.42172.9378.1283.42761.93583.510.12324.91111.63812.3样例输出 1
2584.76提示
【样例解释 1】
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
- 符合规则 ,不需要预交个税;
- 符合规则 ,不需要预交个税;
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
- 符合规则 ,不需要预交个税;
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
- 符合规则 ,超过 的部分为 ,按照 预交为 ;
总和为 。
【数据范围】
小杨同学每月劳务报酬收入均为正,且恰好有一位小数,且不超过 。
代码解析
这道题比较综合,需要在循环中判断输入的每个值是否符合条件,如果大于800,则需要计算个税并累加求和,最终记得保留两位小数。
#include <bits/stdc++.h>using namespace std;int main() {
double sum = 0; double x; for (int i = 1; i <= 12; i++) { cin >> x; if (x > 800) sum += (x-800) * 0.2; } cout << fixed << setprecision(2) << sum;
return 0;}
陕公网安备61010302001363号