zoukankan      html  css  js  c++  java
  • 寻找表达式


    题目描述:

    现在有一个序列123......N,其中N介于3和15之间,要求在序列之间加入+、-或者空格,使得该序列组成的数学表达式的运算结果为0。

    输入:

    输入可能包含多个测试样例。
    对于每个测试案例,输入整数N(3<=N<=15),代表这个序列的长度。

    输出:

    对应每个测试案例,输出所有使得表达式结果为0的组合,当有多个组合时,按字典序进行排序输出。

    样例输入:
    3
    6
    样例输出:
    1+2-3
    1 2+3-4-5-6
    提示:

     1_2+3-4-5-6相当于12+3-4-5-6(‘_’代表空格

    #include <stdio.h>
    
    int op[20];
    char s[3] = {'+','-',' '};
    int n;
    void dfs(int layer,int currentSum,int lastOp,int lastSum){
    	lastSum *= (layer > 9 ? 100 : 10);
    	lastSum += layer;
    	if(layer == n){
    		currentSum += (lastOp) ? (-1 * lastSum) : lastSum;
    		if(currentSum == 0){
    			printf("1");
    			for(int i = 2;i <= n;i++)
    				printf("%c%d",s[op[i - 1]],i);
    			printf("
    ");
    		}
    		return;
    	}
    
    	op[layer] = 2;
    	dfs(layer + 1,currentSum,lastOp,lastSum);
    	currentSum += (lastOp) ? (-1 * lastSum) : lastSum;
    	op[layer] = 0;
    	dfs(layer + 1,currentSum,0,0);
    	op[layer] = 1;
    	dfs(layer + 1,currentSum,1,0);
    }
    
    
    int main(){
    	while(scanf("%d",&n) != EOF){
    		dfs(1,0,0,0);
    	}
    	return 0;
    }
    
    


  • 相关阅读:
    九省联考2018 IIIDX
    WC2020 猜数游戏
    Gym101821D Search Engine
    Gym102586B Evacuation
    Gym102576D Clique
    UOJ498 新年的追逐战
    LOJ6703 小 Q 的序列
    Codechef A Leisurely Journey
    LG5050 多项式多点求值 和 LG5158 多项式快速插值
    PE427 n-sequences 和 ZJOI2020 抽卡
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3258140.html
Copyright © 2011-2022 走看看