Payment Without Change(简单思维)

Payment Without Change

题意:你有a个面值为n的硬币和b个价值为1的硬币。现给你一个数,你能否用这些硬币组成价值为这个数的钱。

题解:

简单的思维题,做的时候有一个问题就是求k和x的时候乱了,应该是求出距离s最近的那部分,求法就是s/n得到是刚好接近的那个倍数,在乘上a。
同时理解一下,如果用a*n的时候,b用的是最少的,如果这个时候b不够用,那就一定不行。将s/n * a得到的是比s小一点的那个数。

#include<bits/stdc++.h>
#define ll long long
#define mod 998244353
#define INF 0x3f3f3f3f
const int MAX = 1e5 + 10;
using namespace std;

int main (void)
{
    int T;
    cin>>T;

    while(T--)
    {
        ll a,b,n,s;

        cin>>a>>b>>n;
        cin>>s;

        if(a*n + b < s)
        {
            cout<<"NO"<<endl;
        }
        else
        {
            ll k = s/n;
            ll x = k*n;

            if(x + b >= s)      
            cout<<"YES"<<endl;
            else
            cout<<"NO"<<endl;
        }
        
    }

    return 0;
}
发布了10 篇原创文章 · 获赞 1 · 访问量 159

猜你喜欢

转载自blog.csdn.net/weixin_45701902/article/details/105317776