Bài toán mua cỏ – Code trong C++ và Pascal

Like Tweet Pin it Share Share Email

Rút kinh nghiệm trong việc chăm sóc đàn bò của mình từ năm ngoái, bác nông dân John mua quá ít loại cỏ khác nhau cho chúng ăn dẫn đến sữa của các cô bò không có được chất lượng thực sự tốt.

Năm nay, bác quyết định sẽ mua n loại cỏ khác nhau về bồi dưỡng cho đàn bò trước kỳ vắt sữa. Bác John mang theo p dollars sang nông trại hàng xóm là nông dân Tom. Bác Tom có trồng n loại cỏ, bác Tom đồng ý bán cho bác John với giá như sau:

– Loại cỏ thứ 1 bán với giá k dollars

– Loại cỏ thứ 2 bán với giá 2k dollars

– Loại cỏ thứ 3 bán với giá 3k dollars

– ….

– Loại cỏ thứ n bán với giá nk dollars

Em hãy cho biết, với p dollars của mình mang theo liệu nông dân John có thể mua được n loại cỏ hay không.

INPUT

  • Một dòng duy nhất chứa 3 số nguyên p, n, k (1 ≤ p, n ≤ 2.108, 1 ≤ k ≤ 20)

OUTPUT

  • Nếu nông dân có đủ tiền mua được n loại cỏ của bác Tom thì đưa ra thông báo là “YES“.
  • Trong trường hợp không đủ tiền thì:
    • Dòng 1: thông báo là “NO
    • Dòng 2: thông báo số tiền mà bác nông dân John phải nợ lại bác nông dân Tom

Ví dụ:

INPUT OUTPUT INPUT OUTPUT
17 4 3 NO

13

33 4 3 YES

Code trong C++

#include <bits/stdc++.h>
using namespace std;
long long p,n,k,s;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    freopen("FORAGE.inp","r",stdin);
    freopen("FORAGE.out","w",stdout);
    cin>>p>>n>>k;
    s=k*(n*(n+1)/2);
    if (s<=p) cout<<"YES";
    else
    {
        cout<<"NO"<<endl;
        cout<<abs(p-s);
    }
    return 0;
}

Code trong Pascal

var n,p,k:int64;

    f1,f2:text;
procedure motep;
begin
assign(f1,'FORAGE.INP');
reset(f1);
assign(f2,'FORAGE.OUT');
rewrite(f2);
end;
procedure dongtep;
begin
close(f1);
close(f2);
end;
begin
motep;
readln(f1,p,n,k);
n:=(n*(n+1)*k) div 2;
if p>=n then write(f2,'YES') else
    begin
    writeln(f2,'NO');
    write(f2,n-p);
    end;
dongtep;
end.

Comments (0)

Trả lời

Your email address will not be published. Required fields are marked *