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.

Authors: jumptozero

  • Để 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


  • 1
    Toilaaibanbietko7A4    10:23 a.m. 15 Tháng 7, 2020

    while (1) la gi vay anh Jumptozero


    • 4
      SPyofgame    6:03 p.m. 15 Tháng 7, 2020
      C++
      while (condition) {
          code();
      }
      

      Trong khi điều kiện condition thỏa \(condition \neq false \Leftrightarrow condtion \neq 0\) thì thực hiện code();


      • 6
        jumptozero    11:01 a.m. 15 Tháng 7, 2020
        • 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),..