[BOJ/C, C++] 逐步解题 / 输入输出与四则运算 ~ 一维数组
发布: (2026年1月1日 GMT+8 15:49)
3 min read
原文: Dev.to
Source: Dev.to
1008题 A/B
题目链接
#include
int main() {
double A, B;
scanf("%lf %lf", &A, &B);
printf("%.9lf", A / B);
}
输出小数点后9位以上即可确保安全。float只能精确表示约6位,因此使用了double。
C++ 实现
#include
#include
int main() {
double A, B;
std::cin >> A >> B;
std::cout
额外时间计算(示例代码)
int main() {
int A, B, C;
scanf("%d %d %d", &A, &B, &C);
B += C; // 将额外时间以分钟加到 B
A += B / 60; // 超过60分钟时增加小时
B %= 60; // 剩余的分钟
printf("%d %d", A >= 24 ? A - 24 : A, B);
}
将额外时间 C 以分钟为单位相加,并利用除以60的余数来计算小时和分钟。
15552题 快速 A+B
题目链接
#include
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
int T;
std::cin >> T;
while (T--) {
int A, B;
std::cin >> A >> B;
std::cout
int main() {
while (true) {
int A, B;
std::cin >> A >> B;
if (std::cin.eof()) break;
std::cout
int main() {
int A, B;
while (std::cin >> A >> B) {
std::cout > X` 遇到非 `int` 的值时会返回 `false`,因此可以像上面那样使用。
10818题 最小值、最大值
题目链接
1. 不使用数组的方法
#include
int main() {
int N;
std::cin >> N;
int maximum = -1000001, minimum = 1000001;
while (N--) {
int temp;
std::cin >> temp;
maximum = (temp > maximum) ? temp : maximum;
minimum = (temp
2. 使用动态数组(排序前)
#include
int main() {
int N;
std::cin >> N;
int* arr = new int[N];
for (int i = 0; i > arr[i];
std::cout
3. 使用动态数组(排序后)
#include
int main() {
int N;
std::cin >> N;
int* arr = new int[N];
for (int i = 0; i > arr[i];
std::sort(arr, arr + N);
std::cout
4. 使用取余运算的问题(示例)
#include
int main() {
bool seen[42] = { false };
int cnt = 0;
for (int i = 0; i > t;
t %= 42;
if (!seen[t]) {
seen[t] = true;
++cnt;
}
}
std::cout
5. 区间翻转(示例)
#include
int main() {
int N, M;
std::cin >> N >> M;
int* arr = new int[N + 1];
for (int i = 1; i > i >> j;
std::reverse(arr + i, arr + j + 1);
}
for (int i = 1; i <= N; ++i) {
std::cout << arr[i] << ' ';
}
delete[] arr;
}
std::reverse 用于翻转区间 [i, j]。篮子从 1 开始,因此不使用索引 0。