Problem I
23 Out of 5
Input: standard input
Output: standard output
Time Limit: 1 second
Memory Limit: 32 MB
Your task is to write a program that can decide whether you can find an arithmetic expression consisting of five given numbers (1<=i<=5) that will yield the value 23.
For this problem we will only consider arithmetic expressions of the following from:
where : {1,2,3,4,5} -> {1,2,3,4,5} is a bijective function
and {+,-,*} (1<=i<=4)
Input
The Input consists of 5-Tupels of positive Integers, each between 1 and 50.
Input is terminated by a line containing five zero's. This line should not be processed.
Output
For each 5-Tupel print "Possible" (without quotes) if their exists an arithmetic expression (as described above) that yields 23. Otherwise print "Impossible".
Sample Input
1 1 1 1 1
1 2 3 4 5
2 3 5 7 11
0 0 0 0 0
Sample Output
Impossible
Possible
Possible
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[5];
bool ok = false;
void dfs(int value, int cur){
if(cur==4){
if(value==23){
ok = true;
}
return;
}
dfs(value+a[cur+1], cur+1);
dfs(value*a[cur+1], cur+1);
dfs(value-a[cur+1], cur+1);
}
int main(){
while(true){
ok = false;
for(int i = 0; i < 5; i++){
scanf("%d", &a[i]);
}
if(a[0]==0){
break;
}
sort(a, a+5);
do{
dfs(a[0], 0);
}while(!ok&&next_permutation(a, a+5));
if(ok){
cout<<"Possible"<<endl;
}else
cout<<"Impossible"<<endl;
}
return 0;
}