Làm tròn hỗn số

Khi thi đại học, hầu hết các môn làm bài dưới dạng trắc nghiệm. Khi làm bài trắc nghiệm đôi khi kết quả có những con số rất lẻ ví dụ như đánh đúng 29/60 thì sẽ được 4,8333 điểm. Trong khi đó quy chế thi đại học yêu cầu điểm các môn chỉ được giữ số lẻ đến từng 1/4. Tức là điểm phải có thể viết ở dạng a+b*(1/4) với a, b là hai số nguyên. Các điểm số quá lẻ như 4,83 phải được làm tròn đến số lẻ 1/4 gần nhất. Một trong những công thức phổ biến là lấy 4,83333 nhân 4. Sau đó làm tròn đến hàng đơn vị theo nguyên tắc thông thường rồi chia kết quả cho 4 ta có 4+3/4 điểm. Nhưng nếu yêu cầu là làm tròn số lẻ đế từng mức 1/ n thì sao?

Không được thêm biến và thư viện nha

#include <iostream>

using namespace std;

int main()
{
int n;
double a;
cin >> a >> n;

((int(a*n+0.5)%n)==0 ) ? (std::cout << int (a)) : (( int(a*n+0.5) < n ) ? (std::cout<< int(double(a)*n+0.5)%n << "/" << n) : (std::cout << int(a) << " " << int(double(a)*n+0.5)%n << "/" << n)) ;

}

Code của em chạy đáp án đúng nhưng khi nộp bài ( web của thầy ) thì lỗi 2/20 và không test gì ở đó. CHo em hỏi có lỗi nào không ạ??

Định dạng lại code cho dễ đọc bạn ơi.
Dùng cặp ba dấu ``` để bao code lại.
VD:

{
    // Bla bla
}
1 Like

Để 0.5 + 0.5 = 1.0 :smiley:
Do phép (int) chỉ giữ phần nguyên (rounding toward 0).

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