• 入门OJ 6247【算式等式】


    描述

      给你N个数字,每个数字均不相同,你可以取其中任意个数字相加,如果所得到的结果在给出的数列中也能找到,则输出这个等式

    输入输出格式

    输入

      第一行一个数字N
      接下来N个数字

    输出

      输出你找到的等式,注意看样例的输出格式 

    输入输出样例

    输入样例1

    6
    1 3 5 7 8 9

    输出样例1

    1+7=8
    1+8=9
    3+5=8
    1+3+5=9

    解题思路

      这道题首先想到的就是分支限界法(<--不知道的童鞋赶紧去看看)限制了深度后才让输出的数字数量从少到多。

    题解

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,q;
     4 int num[101];
     5 set<int> s;//方便寻找 
     6 bool flag[10001];//标记 
     7 bool qwe=false;
     8 void dfs(int sum,int pre,int dep)//总值,开始搜索的下标,深度 
     9 {
    10     if(dep==q+1)//深度超出 
    11     {
    12         if(s.count(sum))//找得到 
    13         {
    14             qwe=true;//控制格式 
    15             for(int i=1;i<=n;i++)
    16             {
    17                 if(flag[i])//有这个数就输出 
    18                 {
    19                     if(!qwe)cout<<"+"<<num[i];
    20                     else
    21                     {
    22                         cout<<num[i];
    23                         qwe=false;
    24                     }
    25                 }
    26                   
    27             }
    28             cout<<"="<<sum<<endl;
    29         }
    30         return;//注意,这这里无论找不找得到都要退出返回 
    31     }
    32     for(int i=pre;i<=n;i++)
    33     {
    34         if(!flag[i])
    35         {
    36             flag[i]=true;
    37             dfs(sum+num[i],i+1,dep+1);
    38             flag[i]=false;//取消标记,回溯操作 
    39         }
    40     }
    41 }
    42 int main()
    43 {
    44    cin>>n;
    45    for(int i=1;i<=n;i++)
    46    {
    47         cin>>num[i];
    48         s.insert(num[i]);//存入set 
    49    }
    50    for( q=2;q<n;q++)//分支限界精髓重点,循环深度搜索,注意全局变量 
    51    {
    52         dfs(0,1,1);
    53    }
    54     return 0;
    55 }

     

  • 相关阅读:
    将1、2、3..10...变成01、02、03...10...
    idea启动项目时报错
    八锁现象
    友联
    通达OA 任意文件删除结合文件上传导致RCE漏洞复现
    Linux提权
    vulnhub靶机DC2记录
    ThinkPHP5.x 任意代码执行漏洞复现
    SaltStack远程命令执行漏洞复现(CVE-2020-11651、CVE-2020-11652)
    vulnhub靶机DC1记录
  • 原文地址:https://www.cnblogs.com/hualian/p/11152037.html
Copyright © 2020-2023  润新知