• uva10344


    就是枚举+ 全排列

    一开始写复杂了,只要每次传进去写三次+-* 就行了

    题目:

    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

    代码:
     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 char opera[]={'*','+','-'};
     6 int arr[6];
     7 bool flag=false;
     8 void dfs(int v,int cur,int u)
     9 {
    10     if(cur>5)
    11     {
    12         if(v==23 && !flag)
    13         {
    14             flag=true;
    15             cout<<"Possible"<<endl;
    16         }
    17         return ;
    18     }
    19 
    20    dfs(v+arr[u],cur+1,u+1);
    21    dfs(v-arr[u],cur+1,u+1);
    22    dfs(v*arr[u],cur+1,u+1);
    23 
    24 }
    25 
    26 
    27 int main()
    28 {
    29     while(1)
    30     {
    31         for(int i=0;i<5;i++)
    32         {
    33             cin>>arr[i];
    34         }
    35         if(arr[0]==0 && arr[1]==0&&arr[2]==0&&arr[3]==0&&arr[4]==0)
    36         {
    37             break;
    38         }
    39         sort(arr,arr+5);
    40         do
    41         {
    42                 dfs(arr[0],1,1);
    43 
    44                 if(flag)break;
    45         }while(next_permutation(arr,arr+5));
    46         if(!flag )
    47             cout<<"Impossible"<<endl;
    48 
    49         flag=false;
    50     }
    51 
    52     return 0;
    53 }
  • 相关阅读:
    python命令方式和关键字
    python注释及语句分类
    基于物联网的智能垃圾桶设计
    基于51单片机的交通灯控制设计
    python安装以及版本检测
    python简介
    关于deepin系统安装design compiler的问题解答
    关于安装deepin+window10双系统有时没有声音的问题
    如何使用notepad运行python程序
    15 一个完整的链式队列代码
  • 原文地址:https://www.cnblogs.com/doubleshik/p/3480581.html
Copyright © 2020-2023  润新知