`
473687880
  • 浏览: 484797 次
文章分类
社区版块
存档分类
最新评论

23 out of 5 UVA 10344

阅读更多

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

Thomas Strohmann

搞了半天,看错题目了,以为数字的顺序不能变。。。顺序是可以变化的。

#include<iostream>
#include<cstring>

using namespace std;

int arry[10],vis[10];
int tag,s,s1;

void dfs(int pos,int s)
{
    if(pos==5&&s==23)
    {
        tag=1;
        return;
    }
    for(int i=0;i<5;i++)
    {
        if(!vis[i])
        {
            vis[i]=1;
            dfs(pos+1,s+arry[i]);
            dfs(pos+1,s-arry[i]);
            dfs(pos+1,s*arry[i]);
            vis[i]=0;
        }
    }
}

int main()
{
    while(cin>>arry[0]>>arry[1]>>arry[2]>>arry[3]>>arry[4])
    {
        if(arry[0]==0&&arry[1]==0&&arry[2]==0&&arry[3]==0&&arry[4]==0) break;
        tag=0;
        int i,j,k;
        for(i=0;i<5;i++)
        {
            memset(vis,0,sizeof(vis));
            vis[i]=1;
            dfs(1,arry[i]);
        }
        if(tag) cout<<"Possible"<<endl;
        else cout<<"Impossible"<<endl;
    }
    return 0;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics