记录12
#include <bits/stdc++.h>
using namespace std;
int main() {
int a,i,t=0,j=1;
cin>>a>>i;
for(j=1;;j++){
t=0;
if(j%a) t=1;
if((j/a+t)>=i) break;
}
cout<<j;
return 0;
}
突破点
给定 A,I,求一个最小的 N,使得⌈N/A⌉≥I。👉向上取整
思路
数据不大,暴力枚举,注意向上取整就行了
代码简析
for(j=1;;j++){
t=0;
if(j%a) t=1;
if((j/a+t)>=i) break;
}
t=0;每次循环,将t设置为0,代表N/A刚好就是I
j=1从1开始枚举,中间没设置终止条件,找到后break就行了
if(j%a) t=1;因为是向上取整,所以有余数(几点几)就要加一
if((j/a+t)>=i) break;N/A后再加上t,t就是看N/A的实际值是整数(t=0)还是小数(t=1)
补充
更快的一种写法
向上取整,要求数字最小,那么最好就是题目中的I−1 点几,所以直接尝试A×(I−1),但是这会得到的是I−1,为了向上取整得到 I ,所以还要再加 1
熟悉数学上的取整后,有一种更简单的数学表达
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,i;
cin>>a>>i;
int n=a*(i-1)+1;
cout<<n;
return 0;
}
再补充
在C++中,可以使用标准库中的
std::ceil和std::floor函数来实现向上取整和向下取整。这些函数定义在<cmath>头文件中。如果不使用标准库函数,也可以手动实现这些功能。使用标准库函数
#include <iostream> #include <cmath> using namespace std; int main() { double num; cout << "Enter a number: "; cin >> num; cout << "Ceil: " << ceil(num) << endl; // 向上取整 cout << "Floor: " << floor(num) << endl; // 向下取整 return 0; }手动实现向上取整和向下取整
如果你不想使用标准库函数,可以手动实现这些功能。以下是手动实现的代码:
向下取整
#include <iostream> using namespace std; int main() { double num; cout << "Enter a number: "; cin >> num; int floorValue = static_cast<int>(num); // 向下取整 if (num < 0 && num != floorValue) { floorValue--; } cout << "Floor: " << floorValue << endl; return 0; }向上取整
#include <iostream> using namespace std; int main() { double num; cout << "Enter a number: "; cin >> num; int ceilValue = static_cast<int>(num); // 向下取整 if (num > 0 && num != ceilValue) { ceilValue++; } cout << "Ceil: " << ceilValue << endl; return 0; }详细解释
向下取整
向下取整:将一个浮点数向下取整到最接近的整数。
实现:使用
static_cast<int>(num)将浮点数转换为整数,这会自动向下取整。特殊情况:如果输入的数是负数且不是整数,需要再减1。
向上取整
向上取整:将一个浮点数向上取整到最接近的整数。
实现:使用
static_cast<int>(num)将浮点数转换为整数,这会自动向下取整。如果输入的数是正数且不是整数,需要再加1。示例输入和输出
输入:
Enter a number: 3.7输出:
Ceil: 4 Floor: 3输入:
Enter a number: -3.7输出:
Ceil: -3 Floor: -4总结
使用标准库函数:使用
<cmath>中的std::ceil和std::floor函数,这些函数已经经过优化,使用起来非常方便。手动实现:如果不使用标准库函数,可以手动实现向上取整和向下取整的功能。手动实现需要考虑正数和负数的不同情况。
942

被折叠的 条评论
为什么被折叠?



