Nhờ mọi người góp ý thuật toán

Đề bài:
Một điểm KARAOKE tính tiền khách hàng theo công thức sau:
 Mỗi giờ trong 3 giờ đầu tiên tính 30 000 đồng/giờ,
 Mỗi giờ tiếp theo có đơn giá giảm 30% so với đơn giá trong 3 giờ đầu tiên.
Ngoài ra nếu thời gian thuê phòng từ 8 – 17 giờ thì được giảm giá 10%. Viết
chương trình nhập vào giờ bắt đầu, giờ kết thúc và in ra số tiền khách hàng phải trả
biết rằng 8 ≤ giờ bắt đầu < giờ kết thúc ≤ 24.

Cách làm của em:

#include <iostream>
#include <time.h>
#include <cstdio>

using namespace std;

int main()
{
    int h1,h2,time,tien;
    cout<<"Nhập giờ bắt đầu thuê phòng: ";
    cin>>h1;
    cout<<"Nhập giò bắt đầu trả phòng: ";
    cin>>h2;
    time = abs(h1-h2);
    cout<<"Số giờ đã thuê phòng: "<<time;
    if (time<=3)
    {
        tien=30000*time;
    }
    if (3<time<8)
    {
        tien=time*30000*30/100;
    }
    if (8<=time<=17)
    {
        tien=time*30000*40/100;
    }
    cout<<"Số tiền phải trả: "<<tien;
    return 0;
}

Trước tiên là nhớ forrmat và markdown code của bạn trước khi đăng lên để mọi người dễ đọc nhé !


Mình không chuyên về C++, nhưng nhìn qua code thì mình nghĩ bạn nên dùng them else để thuật toán có thể chạy nhanh hơn :smile:

Tại sao không phải là time = h2 - h1 @@ Tại vì theo đề bài thì h2 > h1 mà ?

2 Likes
  • Trước tiên, format lại code, lên tìm hiểu cú pháp Markdown nhé, viết như này nè.
  • Thứ hai, t không thấy câu hỏi của bạn đâu, bạn ghi lại câu hỏi, bạn cần góp ý về cái gì thì sửa vào.
  • Cuối cùng, biến tien cần gán giá trị trước nếu không sẽ lỗi
3 Likes
 Mỗi giờ trong 3 giờ đầu tiên tính 30 000 đồng/giờ,
 Mỗi giờ tiếp theo có đơn giá giảm 30% so với đơn giá trong 3 giờ đầu tiên.
Ngoài ra nếu thời gian thuê phòng từ 8 – 17 giờ thì được giảm giá 10%. Viết
chương trình nhập vào giờ bắt đầu, giờ kết thúc và in ra số tiền khách hàng phải trả
biết rằng 8 ≤ giờ bắt đầu &lt; giờ kết thúc ≤ 24.````
xin lỗi mọi người, mình lần đầu sử dụng web này. đề bài đây ạ

Markdown đoạn code của bạn nhé ! Chứ không phải là đề bài !

#include <iostream>
#include <time.h>
#include <cstdio>

using namespace std;

int main()
{
    int h1,h2,time,tien;
    cout<<"Nhập giờ bắt đầu thuê phòng: ";
    cin>>h1;
    cout<<"Nhập giò bắt đầu trả phòng: ";
    cin>>h2;
    time = abs(h1-h2);
    cout<<"Số giờ đã thuê phòng: "<<time;
    if (time<=3)
    {
        tien=30000*time;
    }
    if (3<time<8)
    {
        tien=time*30000*30/100;
    }
    if (8<=time<=17)
    {
        tien=time*30000*40/100; //vì qua 3 giờ đầu đã giảm 30%, 8 đến 17 giờ giảm thêm 10% nữa
    }
    cout<<"Số tiền phải trả: "<<tien;
    return 0;
}

mình lấy giá trị tuyệt đối vì nhỡ nó có sang ngày hôm sau. vd: thuê từ 8h tối đến 3 giờ sáng chẳng hạn

cảm ơn bạn nhé, mình quên mất chưa gán biến time :joy:

Vậy thì bạn quên mất đề bài cho:

Nên là không có chuyện thuê sang ngày hôm sau đâu


Bạn chỉ cần đặt ``` ở trước và sau đoạn code nhé :slight_smile: Đọc kỹ link mình gửi. Với cả hãy dùng tính năng chỉnh sửa bài viết để sửa nhé :smile:

2 Likes

Vậy cái “buff” 30% stack ntn với cái 10%? Tức là nhân với 0.6 hay 0.63? :smiley:

2 Likes

đề bài nó hơi khó hiểu nên mình nghĩ nó cộng dồn vào với cái 30%

cảm ơn bạn, nhưng mình muốn dùng thử cái giá trị tuyệt đối nên làm cho nó đặc biệt tí :smile: còn markdown thì mình mới biết đến, mới sử dụng nên bạn thông cảm :sweat_smile:

Nếu mai sau làm dự án lớn mà bạn cứ thích làm kiểu đặc biệt thế này thì dễ ăn chửi lắm :smile: nên là cái gì tối giản được thì hãy tối giản nhé :smile:


Mà tại sao bạn lại tích solution cho topic này ??

2 Likes

Hình như ý là hát từ 8 tới 17h thì giảm 10% ấy :smiley: chứ ko phải là thuê cỡ đó thì giảm đâu.

2 Likes

Giảm 30% cho khách thì số tiền khách phải trả là nhân 70% chứ???

Bạn đánh dấu Solved rồi xóa đi là có ý gì đây. Chưa kể tôi bảo bạn để ý biến tien, bạn lại ghi [quote=“Lainhattan, post:9, topic:71600”]
chưa gán biến time
[/quote]

biến time làm gì có vấn đề nhỉ.

1 Like

mình cũng hơi khó hiểu ở chỗ đó

mình xóa cái cmt của mình ấy mà, với lại biến tien mình ghi nhầm thành time

cảm ơn bạn đã góp ý nhưng mình không có tích solution cho topic này, chắc do ấn nhầm hay gì đó

1 Like

Phần tính tiền sai cơ bản rồi.
Phải hiểu là giống như tính tiền điện.
3 giờ đầu 30k/h
Những giờ tiếp theo 21k/h
Nếu hát hơn 8giờ thì tổng tiền giảm 10% (đơn giá giờ vẫn tính như 2 luật trên)
Như vậy thuật toán như sau
If (time =< 3) -> tien = time *30k
Else if (3<time<8) -> tien = 90k + (time-3)21k
Else tien = 0.9
(90k+ (time-3)*21k)

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?