题目大意:在给定的区间【l,r】中能不能选出若干数(同一个数使用的次数不限)使得组成数n,每个数使用的次数不限。
思路:这道题只需要判断一下n是不是在能组成区间的范围内即可。所以可以将使用的最大数量的钱和最少数量的钱算出。那么就得到一个可以凑出钱数的区间[mi*l,mi*r]。(注意再算使用最少数量的钱数时如果能r能被n整除则为n/r,否则为n/r+1 如 7 3 4最少要2个 )
#include <iostream> #include <cstring> #include<cmath> #include<cstdio> using namespace std; int main() { long long n,m,i,j,k,l,r; scanf("%lld",&k); while(k--) { scanf("%lld%lld%lld",&n,&l,&r); if(n<l) { printf("No\n"); continue; } long long mi; long long ma=n/l; if(n%r==0) mi=n/r; else mi=n/r+1; if(l*mi<=n&&n<=r*ma) { printf("Yes\n"); } else printf("No\n"); } return 0; }