- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

# Card Flipping Game in C++

Suppose on a table are N cards, with a positive integer printed on both side of each card (possibly different). We have to flip any number of cards, and after we choose one card. If the number X on the back side of the chosen card is not on the front of any card, then the number X is known as good. We have to find the smallest number that is good? When no number is good, return 0. Here, fronts[i] and backs[i] represent the number on the front and back side of card i. A flip will swap the front and back numbers, so the value on the front is now on the back and vice versa.

So if the input is like fronts = [1,2,4,4,7] and backs = [1,3,4,1,3], then the output will be 2. So if we flip the second card, the front value will be [1,3,4,4,7], and the backs will be [1,2,4,1,3]. We will choose the second card, which has number 2 on the back, and it is not on the front of any card, so 2 is a good number.

To solve this, we will follow these steps −

- define a set s, n := size of fronts, ret := inf
- for i in range 0 to n – 1
- if fronts[i] = back[i], then insert fronts[i] into s

- for i in range 0 to n – 1
- if fronts[i] in set then ret := minimum of ret and fronts[i]

- for i in range 0 to n – 1
- if backs[i] not in set then ret := minimum of ret and backs[i]

- return 0 when ret = inf, otherwise ret.

Let us see the following implementation to get better understanding −

## Example

#include <bits/stdc++.h> using namespace std; class Solution { public: int flipgame(vector<int>& fronts, vector<int>& backs) { set <int> s; int n = fronts.size(); int ret = INT_MAX; for(int i = 0; i < n; i++){ if(fronts[i] == backs[i])s.insert(fronts[i]); } for(int i = 0; i <n; i++ ){ if(s.count(fronts[i]) == 0) ret = min(ret, fronts[i]); } for(int i = 0; i <n; i++ ){ if(s.count(backs[i]) == 0) ret = min(ret, backs[i]); } return ret == INT_MAX? 0 : ret; } }; main(){ vector<int> v1 = {1,2,4,4,7}; vector<int> v2 = {1,3,4,1,3}; Solution ob; cout << (ob.flipgame(v1, v2)); }

## Input

[1,2,4,4,7] [1,3,4,1,3]

## Output

2

- Related Questions & Answers
- C++ program to find winner of card game
- Flipping an Image in Python
- Score After Flipping Matrix in C++
- Difference between Graphics Card and Video Card
- Connect SD Card with Arduino and get Card Info
- Bootstrap .card class
- Hangman Game in Python?
- Jump Game in Python
- Stone Game in C++
- Elimination Game in C++
- Dungeon Game in C++
- Zuma Game in C++
- 24 Game in C++
- Nim Game in C++
- Baseball Game in Python