J'essaie d'écrire un programme C++ qui fonctionne comme le jeu 24. Pour ceux qui ne connaissent pas ce jeu, il s'agit de trouver comment 4 nombres peuvent totaliser 24 grâce aux quatre opérateurs algébriques +, -, /, * et les parenthèses.
A titre d'exemple, disons que quelqu'un entre 2,3,1,5 ((2+3)*5) - 1 = 24
Il était relativement simple de coder la fonction permettant de déterminer si trois nombres peuvent faire 24 en raison du nombre limité de positions pour les parenthèses, mais je ne parviens pas à la coder efficacement lorsque quatre variables sont entrées.
J'ai quelques permutations qui fonctionnent maintenant mais je ne peux toujours pas énumérer tous les cas car je ne sais pas comment coder pour les cas où les opérations sont les mêmes.
Par ailleurs, quelle est la méthode la plus simple pour calculer l'IPR ? Je suis tombé sur de nombreuses pages telles que celle-ci : http://www.dreamincode.net/forums/index.php?showtopic=15406 mais en tant que débutant, je ne sais pas comment le mettre en œuvre.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool MakeSum(int num1, int num2, int num3, int num4)
{
vector<int> vi;
vi.push_back(num1);
vi.push_back(num2);
vi.push_back(num3);
vi.push_back(num4);
sort(vi.begin(),vi.end());
char a1 = '+';
char a2 = '-';
char a3 = '*';
char a4 = '/';
vector<char> va;
va.push_back(a1);
va.push_back(a2);
va.push_back(a3);
va.push_back(a4);
sort(va.begin(),va.end());
while(next_permutation(vi.begin(),vi.end()))
{
while(next_permutation(va.begin(),va.end()))
{
cout<<vi[0]<<vi[1]<<vi[2]<<vi[3]<< va[0]<<va[1]<<va[2]<<endl;
cout<<vi[0]<<vi[1]<<vi[2]<<va[0]<< vi[3]<<va[1]<<va[2]<<endl;
cout<<vi[0]<<vi[1]<<vi[2]<<va[0]<< va[1]<<vi[3]<<va[2]<<endl;
cout<<vi[0]<<vi[1]<<va[0]<<vi[2]<< vi[3]<<va[1]<<va[2]<<endl;
cout<<vi[0]<<vi[1]<<va[0]<<vi[2]<< va[1]<<vi[3]<<va[2]<<endl;
}
}
return 0;
}
int main()
{
MakeSum(5,7,2,1);
return 0;
}