最近,我试图在c++中找到从a到b(包括两者)范围内的数字n的倍数。这是我的方法:
通过将答案设置为 (b - a - 1) / n 来查找 a 到 b 范围内的 n 倍数(不包括两者)。
将答案设置为answer + 1 if a % n == 0 else to answer
如果 b % n == 0,则将答案设置为答案 + 1,否则为答案
打印答案
看起来很对。但问题在于这个测试:a = 4,b = 6,n = 5。该方法的作用是:
结果是0,而输出应该是1,因为在4到6的范围内,出现了5,因此答案应该是1。
我也尝试过思考不同的方法来解决这个问题,但我没有想到。谁能告诉我这个问题有什么解决办法吗?请注意,您不能通过暴力来解决此问题,因为输入的约束如下:
1 <= a, b, n <= 1000000000 (10 to the power 9)
// Code for the above approach
#include <bits/stdc++.h>
using namespace std;
int main(){
// Assigning the values as int
int a, b, n;
// Taking input
cin >> a >> b >> n;
// First step
int ans = (b - a - 1) / n;
// Second step
ans += ((a % n) == 0? 1: 0);
// Third step
ans += ((b % n) == 0? 1: 0);
// Last step
cout << ans;
}
在我看来,断点在于这样一个事实:使用
(b - a - 1) / n
,您正在测试范围是否足够长以适合您的分隔符,但您不检查整数变量中的范围位置,即,如果分隔符可能已经在范围内。
您应该检查范围内的第一次出现:您只需检查
n
变量。从那里你可以继续你的其他方法......