zoukankan      html  css  js  c++  java
  • USACO 2.3 Zero Sum 【搜索+字符串处理+模拟计算】

    题目在这:
    https://www.luogu.org/problem/show?pid=1473
     
     
    分析:
    1、既然算式中的数字都已经帮你放好,那么我们的工作就只是在数字中插入‘+‘,’-‘,’  ‘罢了,由于符号间又有明确的优先级顺序:a_b > a+b > a-b,因此我们通过搜索来完成这个插入工作。
    2、等插入好了以后,我们还应检验此式是否为零。我个人认为比较方便的办法是将数字与符号分开,再取一个数,取一个符号,进行计算。
     
    下面是参考代码:
     
    /*
    ID: linda_f1
    PROG: zerosum
    LANG: C++
    */
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n;
    char temp[200];
    bool cal(){
        char stack1[200];
        int stack2[200],pp = 1,p1 = 0,p2 = 0;
        //处理符号栈和数字栈,再一一取出计算
        for(int i = 2;i < 2 * n;i += 2){
            if(temp[i] == ' ') pp = 10 * pp + (temp[i+1] - '0');
            else{
                stack1[++p1] = temp[i];
                stack2[++p2] = pp; pp = temp[i+1] - '0';
            }
        }
        stack2[++p2] = pp;
        int a = stack2[1],b = stack2[2],ptr = 2;
        for(int i = 1;i <= p1;i++){
            if(stack1[i] == '+'){
                a += b; b = stack2[++ptr];
            }else{
                a -= b; b = stack2[++ptr];
            }
        }
        if(!a) return true;
        return false;
    }
    
    void dfs(int p)
    {
     if(p==n)
     {
      if(cal())
      {
       for(int i=1;i<n*2;i++)
        cout<<temp[i];
       cout<<endl;   
      }
      return ;
     }
     temp[2*p]=' ';
     temp[2*p+1]=(char)(p+1+48);
     dfs(p+1);
     temp[2*p]='+';
     temp[2*p+1]=(char)(p+1+48);
     dfs(p+1);
     temp[2*p]='-';
     temp[2*p+1]=(char)(p+1+48);
     dfs(p+1);
    }
    int main()
    {
     freopen("zerosum.in","r",stdin);
     freopen("zerosum.out","w",stdout);
     cin>>n;
     temp[1]='1';
     dfs(1);
     return 0; 
    } 
    View Code
  • 相关阅读:
    h5唤起app
    app唤起的完美解决方案,及阻止浏览器的默认弹窗行为
    cdn
    函数声明和函数表达式的区别
    基础系列(7)—— 结构
    基础系列(4)—— C#装箱和拆箱
    重温软件工程——对软件工程的初步了解
    基础系列(9)—— 抽象方法和接口
    自学系列--git的基础简介
    设计模式之简单工厂模式
  • 原文地址:https://www.cnblogs.com/linda-fcj/p/7206191.html
Copyright © 2011-2022 走看看