Hướng dẫn cho Đoán số
Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Authors:
-
Để giao tiếp với máy chấm, ta cần in ra lệnh và có XUỐNG DÒNG. Ví dụ như trong code : cout<<mid<<'\n';
-
Sau khi in ra lệnh giao tiếp với máy chấm, trong trường hợp này là cout<<mid<<'\n';. Ta cần thực hiện lệnh flush. Lệnh này có nghĩa là bắt máy chấm đọc vào câu lệnh mà người dùng nhập. Ở Free Pascal, lệnh này là flush(output). Ở C++, lệnh này là fflush(stdout). Sau khi đã flush, các bạn mới có thể đọc dữ liệu trả về của máy, trong trường hợp này là cin>>s;.
-
Hi vọng các bạn đã hiểu cách thức giao tiếp với máy.
C++
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
ll l = 1, r = (ll)(2e9),mid;
while (1) {
mid = (l + r ) / 2;
cout<<mid<<'\n';
fflush(stdout);
string s;
cin>>s;
if(s=="SMALLER")
r = mid - 1;
else if (s=="BIGGER")
l = mid+1;
else break;
}
return 0;
}
- P/s: Ở trên cái đề là "HOLA" nhé, không phải "BINGO" (vì mình đã test rồi).
- Nếu có gì khó hiểu hoặc sai , mọi người cứ comment nhé.
Bình luận
while (1) la gi vay anh Jumptozero
Trong khi điều kiện
condition
thỏa \(condition \neq false \Leftrightarrow condtion \neq 0\) thì thực hiệncode();
While(1) tức là là ta thực hiện vòng while mà không cần bất cứ điều kiện gì. !
Vòng while này là vô hạn, chúng chỉ dừng lại khi ta tác động những thứ bên trong vòng while đó, chẳng hạn có lệnh break, return 0, exit(0),..