2024年9月16日
最近在学吉他,好难,和弦一直按就是按不对。好难过。
最近在学吉他,好难,和弦一直按就是按不对。好难过。
学校和 yyy 的家之间的距离为 $s$ 米,而 yyy 以 $v$ 米每分钟的速度匀速走向学校。
在上学的路上,yyy 还要额外花费 $10$ 分钟的时间进行垃圾分类。
学校要求必须在上午 $\textrm{8:00}$ 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。
由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。
一行两个正整数 $s,v$,分别代表路程和速度。
输出一个 $24$ 小时制下的时间,代表 yyy 最晚的出发时间。
输出格式为 $\texttt{HH:MM}$,分别代表该时间的时和分。必须输出两位,不足前面补 $0$。
100 99
07:48
对于 $100\%$ 的数据,$1 \le s,v \le 10^4$。
题解 :
#include<bits/stdc++.h>
using namespace std;
int main() {
double s ,v ,m,t;
int h;
scanf("%lf %lf",&s,&v);
t = s/v + 10;
h = t / 60;
m = ceil(t - h*60);
int mm = (int)m;
if (mm == 0) printf("%02d:%02d",8 - h,mm);
else if (mm == 60) printf("%02d:00",7 - h);
else {
h = 7 - h;
mm = 60 - mm;
if (h < 0) printf("%02d:%02d",h + 24,mm); //当h<0说明就是前一天就出发了,提前的时间超过8h
else printf("%02d:%02d",h,mm);
}
return 0;
}
这题的两个坑就是 1、因为是向上取整用的ceil(),所以当m 是59.5,这样的数时,m会取整为60,这个时候就是要让他变成0,然后小时数减1,第二个坑就是h有可能算出来是负的,因为有可能提前的时间超过了8小时,这个时候就是给他加上24小时,相当于就是24小时去减,变成前一天的出发时间。
要对浮点数进行类似取模的操作,你可以使用math.h
库中的fmod
函数,它专门用于浮点数的取模运算。
代码如下:
#include <math.h>
m = ceil(fmod(t, 60));
这样,fmod(t, 60)
会返回t
除以60
后的余数,然后再用ceil
函数取整。
#include <stdlib.h>
是 C 标准库的一个头文件,它包含了许多与内存分配、进程控制、随机数生成、排序/搜索以及数据类型转换等相关的函数声明。这个头文件在 C 和 C++ 中都被广泛使用。
以下是 stdlib.h
中一些常用的函数和它们的用途:
malloc()
:分配一块未初始化的内存。
void* malloc(size_t size);
例如:
int* arr = (int*) malloc(10 * sizeof(int));
calloc()
:分配一块内存并将其初始化为零。
void* calloc(size_t num, size_t size);
例如:
int* arr = (int*) calloc(10, sizeof(int));
realloc()
:重新调整已分配的内存块的大小。
void* realloc(void* ptr, size_t new_size);
例如:
arr = (int*) realloc(arr, 20 * sizeof(int));
free()
:释放动态分配的内存。
void free(void* ptr);
例如:
free(arr);
rand()
:生成一个介于 0
和 RAND_MAX
之间的随机整数。
int rand(void);
例如:
int random_value = rand();
srand()
:设置随机数生成器的种子,常用于生成不同的随机数序列。
void srand(unsigned int seed);
例如:
srand(time(NULL)); // 使用当前时间作为种子
exit()
:终止程序执行,并返回一个状态码。
void exit(int status);
例如:
exit(0); // 正常退出
system()
:执行系统命令。
int system(const char* command);
例如:
system("ls"); // 在Linux系统中列出目录内容
atoi()
:将字符串转换为整数。
int atoi(const char* str);
例如:
int num = atoi("123");
atof()
:将字符串转换为浮点数。
double atof(const char* str);
例如:
double num = atof("123.45");
atol()
:将字符串转换为长整数。
long atol(const char* str);
strtol()
、strtod()
:这些函数提供了更灵活的字符串到数值转换方式,可以指定进制或错误处理。
long int strtol(const char* str, char** endptr, int base);
qsort()
:使用快速排序算法对数组进行排序。
void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*));
例如,排序一个整型数组:
int compare(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
qsort(arr, n, sizeof(int), compare);
bsearch()
:使用二分查找在已排序的数组中查找元素。
void* bsearch(const void* key, const void* base, size_t num, size_t size, int (*compar)(const void*, const void*));
getenv()
:获取环境变量的值。
char* getenv(const char* name);
例如:
char* path = getenv("PATH");
#include <stdlib.h>
头文件提供了 C 程序中许多基础功能,包括:
malloc
、calloc
、realloc
、free
)rand
、srand
)exit
、system
)atoi
、atof
、strtol
)qsort
、bsearch
)它是一个通用的、实用的库,几乎在每一个 C 程序中都能找到它的使用场景。
#include<bits/stdc++.h>
是一个在 C++ 编程中经常使用的头文件,它包含了 C++ 标准库中几乎所有的头文件。因此,它在很多竞赛编程或者快速原型开发中被广泛使用,因为它可以避免手动包含每一个单独需要的库文件。
不过,需要注意以下几点:
#include<bits/stdc++.h>
这个文件并不是 C++ 标准的一部分,它是 GCC(GNU Compiler Collection)编译器的一部分,因此它可能在其他编译器上不可用。例如,Visual Studio 编译器就不支持这个头文件。所以,#include<bits/stdc++.h>
虽然非常方便,尤其是在竞赛编程中,但并不是一个“万能库”,也不是推荐在所有情况下使用的库。