30/09/2018, 16:49

Giải bài toán C++ thú vị

Tình cờ biết đọc được bài toán này. Mời mọi người giải trí tí ạ
Đề: Tính số vé xe bus + tiền dư
Khách đưa 1 số tiền, giá mỗi vé là 2000.
Tính số vé mà khách có thể mua được. Nếu số tiền dư >= 1000 thì có thể mua thêm 1 vé và dư = 0.
Ví dụ: +Khách đưa 5000 => Vé = 3, dư = 0
+Khách đưa 4500 => Vé = 2, dư =500.
+Khách đưa 3500 => Vé = 2, dư =0.
*Lưu ý: Chỉ được sử dụng các phép toán + - * / % và ép kiểu.
Nghĩa là cấm vòng lặp/goto, cấm câu điều kiện, cấm nọi biểu thức so sánh

Gió viết 18:55 ngày 30/09/2018

Đây là bài làm của mình

#include <stdio.h>
int main() {
    int n=200;
    int q=n/2000;
    int r=n%2000;
    unsigned t=r-999;
    int signed_bit=t/0x80000000;/*0x80000000 = 1<<31 */// xác định r>=1000 hay không 
    //signed_bit=0 -> >=1000  or  =1 <1000
    
    q+=(1-signed_bit);
    r*=signed_bit;
    printf("%d %d\n",q,r);
    return 0;
}

nhatlonggunz viết 18:56 ngày 30/09/2018

Em chỉ làm được thế này thôi

#include <iostream>
using namespace std;

int main()
{
	int n;
	cin >> n; // Input the amount of money

	int count = (n / 2000) + ((n % 2000) / 1000);
	cout << count << endl;

	return 0;
}
Ngô Thế Ánh viết 18:51 ngày 30/09/2018

Thú vị ở chỗ đưa ra số dư. hì

Ngô Thế Ánh viết 18:58 ngày 30/09/2018

Code của Gió mình chưa lĩnh hội được. Gió có thể nói qua ý tưởng được không?

Gió viết 19:01 ngày 30/09/2018

Kiểu int thì có bit đầu để lưu dấu. Vì không dc dùng so sánh nên mình cast sang unsigned thì các bit của nó vẫn giữ nguyên. Như vậy để lấy giá tri bit đầu thì chia cho 2^31 nữa

Son0nline viết 18:51 ngày 30/09/2018

code của mình đơn giản ngắn gọn có thế này thôi

void ShortNComplicated(int TienKhachDua){
int GiaVe = 2000;
int HanMucKM = 1000;
int MaxVe = TienKhachDua / GiaVe + ((TienKhachDua % GiaVe) / HanMucKM);
int Du = (TienKhachDua % GiaVe) *(1 - ((TienKhachDua % GiaVe) / HanMucKM));
printf("Ve=%d, du=%d\n", MaxVe, Du);

}

Ngô Thế Ánh viết 18:53 ngày 30/09/2018

Gọn thật. Về mặt ý tưởng thì t giống của sonOnline

Hoan Sò viết 18:54 ngày 30/09/2018

Thế thà đưa 5000 còn được 3 vé chứ đưa 6000 cũng được có 3 vé. khó chỗ này

Ngô Thế Ánh viết 18:59 ngày 30/09/2018

Chỉ là giải trí thôi mà bạn :). Ngoài mà được vậy thì quý mất anh thu vé xe phải biết

Bài liên quan
0