# Interactive Problems in Competitive Programming

• Difficulty Level : Easy
• Last Updated : 19 Jan, 2021

Interactive Problems are those problems in which our solution or code interacts with the judge in real time. When we develop a solution for an Interactive Problem then the input data given to our solution may not be predetermined but is built for that problem specifically. The solution performs a series of exchange of data with the judge and at the end of the conversation the judge decides whether our solution was correct or not.

## Guessing the Number (An Interactive Problem)

In this problem the user has to guess the number during a communication with the judge. The user is provided with the upper and lower bound and he/she can ask the judge whether a number is the number to be guessed. The judge replies with -1 if the number is smaller than the number to be guessed or 1 if number is greater than the number to be guessed or 0 if it is equal to the number to be guessed.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

### Approach 1 : Linear Guessing

The user can query the judge for all the numbers between lower limit and upper limit to find the solution. ## C++

 `#include ``using` `namespace` `std;` `int` `main()``{``    ``int` `lower_bound = 2;``    ``int` `upper_bound = 10;` `    ``// Number to be guessed is 6` `    ``// Iterating from lower_bound to upper_bound``    ``for` `(``int` `i = lower_bound; i <= upper_bound; i++) {``        ``cout << i << endl;` `        ``// Input the response from the judge``        ``int` `response;``        ``cin >> response;` `        ``if` `(response == 0) {``            ``cout << ``"Number guessed is :"` `<< i;``            ``break``;``        ``}``    ``}` `    ``return` `0;``}` `// This code is contributed by divyeshrabadiya07`

## Java

 `import` `java.util.*;``class` `GFG {``    ``public` `static` `void` `main(String[] args)``    ``{``        ``Scanner sc1 = ``new` `Scanner(System.in);``        ``int` `lower_bound = ``2``;``        ``int` `upper_bound = ``10``;` `        ``// Number to be guessed is 6` `        ``// Iterating from lower_bound to upper_bound``        ``for` `(``int` `i = lower_bound; i <= upper_bound; i++) {``            ``System.out.println(i);` `            ``// Input the response from the judge``            ``int` `response = sc1.nextInt();` `            ``if` `(response == ``0``) {``                ``System.out.println(``"Number guessed is :"` `+ i);``                ``break``;``            ``}``        ``}``    ``}``}`

## Python3

 `if` `__name__``=``=``'__main__'``:``    ``lower_bound ``=` `2``;``    ``upper_bound ``=` `10``;` `    ``# Number to be guessed is 6` `    ``# Iterating from lower_bound to upper_bound``    ``for` `i ``in` `range``(lower_bound, upper_bound ``+` `1``):``        ``print``(i)` `        ``# Input the response from the judge``        ``response ``=` `int``(``input``())` `        ``if` `(response ``=``=` `0``):``            ``print``(``"Number guessed is :"``, i, end ``=` `'')``            ``break``;` `            ``# This code is contributed by rutvik_56`

## C#

 `using` `System;``class` `GFG``{``    ``public` `static` `void` `Main(``string``[] args)``    ``{      ``        ``int` `lower_bound = 2;``        ``int` `upper_bound = 10;`` ` `        ``// Number to be guessed is 6`` ` `        ``// Iterating from lower_bound to upper_bound``        ``for` `(``int` `i = lower_bound; i <= upper_bound; i++)``        ``{``            ``Console.WriteLine(i);`` ` `            ``// Input the response from the judge``            ``int` `response = ``int``.Parse(Console.ReadLine());`` ` `            ``if` `(response == 0) {``                ``Console.WriteLine(``"Number guessed is :"` `+ i);``                ``break``;``            ``}``        ``}``    ``}``}` `// This code is contributed by Pratham76`

Time Complexity: O(n)

### Approach 2 : Applying Binary Search

We can also apply binary search interactively to find the solution. This solution is efficient as compared to the previous approach. ## Java

 `import` `java.util.*;``class` `GFG {``    ``public` `static` `void` `main(String[] args)``    ``{``        ``Scanner sc1 = ``new` `Scanner(System.in);``        ``int` `lower_bound = ``2``;``        ``int` `upper_bound = ``10``;` `        ``// Number to be guessed is 9` `        ``// Applying Binary Search interactively``        ``while` `(lower_bound <= upper_bound) {``            ``int` `mid = (lower_bound + upper_bound) / ``2``;` `            ``// Print the guessed number``            ``System.out.println(mid);` `            ``// Input the response from the judge``            ``int` `response = sc1.nextInt();` `            ``if` `(response == -``1``) {``                ``lower_bound = mid + ``1``;``            ``}``            ``else` `if` `(response == ``1``) {``                ``upper_bound = mid - ``1``;``            ``}``            ``else` `if` `(response == ``0``) {``                ``System.out.println(``"Number guessed is :"` `+ mid);``                ``break``;``            ``}``        ``}``    ``}``}`

## C#

 `using` `System;``class` `GFG {``  ``static` `void` `Main() {``    ``int` `lower_bound = 2;``    ``int` `upper_bound = 10;` `    ``// Number to be guessed is 9` `    ``// Applying Binary Search interactively``    ``while` `(lower_bound <= upper_bound) {``        ``int` `mid = (lower_bound + upper_bound) / 2;` `        ``// Print the guessed number``        ``Console.WriteLine(mid);` `        ``// Input the response from the judge``        ``int` `response = Convert.ToInt32(Console.ReadLine());` `        ``if` `(response == -1) {``            ``lower_bound = mid + 1;``        ``}``        ``else` `if` `(response == 1) {``            ``upper_bound = mid - 1;``        ``}``        ``else` `if` `(response == 0) {``            ``Console.WriteLine(``"Number guessed is :"` `+ mid);``            ``break``;``        ``}``    ``}``  ``}``}` `// This code is contributed by divyesh072019`

Time Complexity: O(logn)