数字序列和为0--一串数字 添加符号 使其结果为0

该博客讨论了一种数学问题,即如何在3到9之间的数字序列中添加加减号使其和为0。博主介绍了通过计算所有可能的分隔符组合,使用3进制映射和状态机来判断是否得到0的解决方案。还提到了一个纯深度优先搜索的解法,强调了题目特化的自动机和栈计算方法。
摘要由CSDN通过智能技术生成

题目:序列123...N,N介于3和9之间,在其中加入+、-或者空格,使其和为0。如123456  1-2 3-4 5+6 7 等价于1-23-45+67=0。请问,如何获得所有组合?

思路:

  • 由于N是从3至9的范围,解决方案就是针对每个N的取值,先计算三个分隔符“_ + -”填入序列1-N的所有可能组合的情况总数
  • 设置所有情况的组合序列(采用3进制的思想,即set函数)
  • 对每种组合计算表达式值,如果为0则输出(利用栈&状态机,calculate函数)

#include <stdio.h>
 
/*
 * Initialize the string with 1 to 9 and seperated by whitespace
 * for len in range(3, 9+1):
 *    for each possibility of seperators:
 *        calculate the result, if it's zero, output
 */
 
int calculate(char input[], int n)
{
    //Use a simple state machine to interpret the input as an expression
    int stack[3] = {0}, sp = 0, i = 0;
    for(; i < n*2-1; ++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值