UVA 10344 (13.07.19)

来源:互联网 发布:2017网络效应题库 编辑:程序博客网 时间:2024/05/19 03:27

Problem I

23 Out of 5

Input: standard input

Output: standardoutput

Time Limit: 1 second

Memory Limit: 32 MB

Your task is to writea program that can decide whether you can find an arithmetic expression consistingof five given numbers(1<=i<=5) that will yieldthe value 23.
For this problem we will only consider arithmetic expressions of the followingfrom:

 
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-Tupelsof positive Integers, each between 1 and 50.
Input is terminated by a line containing five zero's. This line should not beprocessed.

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题意:输入五个数, 任意顺序, 之间用 + - * , 使得数等于23~DFS吧!AC代码:
#include<stdio.h>#include<algorithm>using namespace std;int num[10];int mark;int succeed;void DFS(int i, int sum) {if(sum == 23 && i == 5) {succeed = 1;return;}if(i >= 5)return;DFS(i+1, sum+num[i]);DFS(i+1, sum-num[i]);DFS(i+1, sum*num[i]);}int main() {while(1) {mark = 1;for(int i = 0; i < 5; i++) {scanf("%d", &num[i]);if(num[i] != 0)mark = 0;}if(mark == 1)break;succeed = 0;sort(num, num+5);DFS(1, num[0]);while(next_permutation(num, num+5) && succeed == 0)DFS(1, num[0]);if(succeed == 1)printf("Possible\n");elseprintf("Impossible\n");}return 0;}

原创粉丝点击