01/10/2018, 16:49

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;
}
Nguyễn Đình Anh viết 18:52 ngày 01/10/2018

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é !

Làm sao để có thể hiển thị syntax highlighting bằng markdown? Các bạn phải đánh dấu ``` như ví dụ dưới đây Chú ý, dấu ``` được tạo ra bởi nút nằm bên trái số 1 trên bàn phím, nút này sẽ là ~ khi bấm giữ Shift Ví dụ cho C Nội dung: ``` void main() { } ``` Và đừng quên ``` ở cuối Kết quả void main() { } Ví dụ cho Pascal Nội dung: ``` Program HelloWorld; Begin WriteLn('Hello world!') {no ";" is required after the last statement of a block - adding one adds a "null stateme…


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

time = abs(h1-h2);

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

Kamui Ka viết 18:57 ngày 01/10/2018
  • 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
Lại Nhật Tân viết 18:59 ngày 01/10/2018
 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 ạ
Nguyễn Đình Anh viết 18:58 ngày 01/10/2018

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

Lại Nhật Tân viết 18:59 ngày 01/10/2018
#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;
}
Lại Nhật Tân viết 19:01 ngày 01/10/2018

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

Lại Nhật Tân viết 18:56 ngày 01/10/2018

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

Nguyễn Đình Anh viết 19:03 ngày 01/10/2018

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

biết rằng 8 ≤ giờ bắt đầu < giờ kết thúc ≤ 24.

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é Đọ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é

rogp10 viết 18:50 ngày 01/10/2018

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?

Lại Nhật Tân viết 19:00 ngày 01/10/2018

đề 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%

Lại Nhật Tân viết 19:05 ngày 01/10/2018

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í còn markdown thì mình mới biết đến, mới sử dụng nên bạn thông cảm

Nguyễn Đình Anh viết 18:54 ngày 01/10/2018

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í

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 nên là cái gì tối giản được thì hãy tối giản nhé


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

rogp10 viết 18:54 ngày 01/10/2018

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

NhậtĐz viết 18:51 ngày 01/10/2018

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

Kamui Ka viết 18:51 ngày 01/10/2018

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ỉ.

Lại Nhật Tân viết 18:54 ngày 01/10/2018

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

Lại Nhật Tân viết 19:06 ngày 01/10/2018

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

Lại Nhật Tân viết 18:53 ngày 01/10/2018

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ì đó

Esports Channel viết 19:04 ngày 01/10/2018

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)

rogp10 viết 18:57 ngày 01/10/2018

Nếu hát hơn 8giờ

Bạn có thấy chỗ này… nó sao sao không

Nói chung là đề chưa rõ lắm.

Bài liên quan
0