Description

请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N。 现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将每一对数字组合在一起(请不在第一个数字前插入符号)。 计算该表达式的结果并注意你是否得到了和为零。 请你写一个程序找出所有产生和为零的长度为N的数列。

Input

单独的一行表示整数N (3 <= N <= 9)。

Output

按照ASCII码的顺序,输出所有在每对数字间插入“+”, “-”, 或 “ ”后能得到和为零的数列。(注意:就算两个数字之间没有插入符号也应该保留空格)

Sample Input

7

Sample Output

1+2-3+4-5-6+7
1+2-3-4+5+6-7
1-2 3+4+5+6+7
1-2 3-4 5+6 7
1-2+3+4-5+6-7
1-2-3-4-5+6+7 解题思路:使用深搜不断枚举三种符号 '+' '-' ' '三种情况。这里我对DFS()函数设置了三个参数:当前位置pos,不含当前位置的和sum,当前位置上的数last。递归结束标志是
pos==n,sum+last=0。
这道题参考了网上的一些代码,这个代码还算是思路清晰,比较好理解,自己对DFS写起来还是比较生硬啊。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[];
int n;
void DFS(int pos,int sum,int last)///三个参数:当前位置,不含当前位置的和,当前位置上的数
{
int i;
if(pos==n)
{
if(sum+last==)
{
printf("%s\n",s);
}
return;
}
s[pos*-]=' '; //搜索‘ ’号
if(last>)
{
DFS(pos+,sum,last*+pos+);
}
else
{
DFS(pos+,sum,last*-pos-);
}
s[pos*-]='+'; //搜索‘+’号
DFS(pos+,sum+last,pos+);
s[pos*-]='-'; //搜索‘-’号
DFS(pos+,sum+last,-(pos+));
} int main()
{
int i;
scanf("%d",&n);
for(i=;i<n;i++)
{
s[i*]=i+'';
}
DFS(,,);
return ;
}

USACO 2.3.3 Zero Sum 和为零(深搜枚举)的更多相关文章

  1. (深搜)Sum It Up -- poj --1564

    链接: http://poj.org/problem?id=1564 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...

  2. 简单深搜:POJ1546——Sum it up

    结束了三分搜索的旅程 我开始迈入深搜的大坑.. 首先是一道比较基础的深搜题目(还是很难理解好么) POJ 1564 SUM IT UP 大体上的思路无非是通过深搜来进行穷举.匹配 为了能更好地理解深搜 ...

  3. 【USACO 2.3】Zero Sum(dfs)

    按字典序输出所有在123..n之间插入'+','-',' '结果为0的表达式.. http://train.usaco.org/usacoprob2?a=jUh88pMwCSQ&S=zeros ...

  4. USACO Section 2.3: Zero Sum

    这题我做得比较麻烦,网上有个比较简单的程序. /* ID: yingzho1 LANG: C++ TASK: zerosum */ #include <iostream> #include ...

  5. NYoj The partial sum problem(简单深搜+优化)

    题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=927 代码: #include <stdio.h> #include & ...

  6. 4 Values whose Sum is 0 POJ 2785 (折半枚举)

    题目链接 Description The SUM problem can be formulated as follows: given four lists A, B, C, D of intege ...

  7. Sum It Up -- 深搜 ---较难

    每一行都是一组测试案例   第一个数字 表示总和 第二个数字表示 一共有几个可用数据  现在 按照从小到大的顺序   输出  那些数字中若干数字之和为总和的  信息 /. 很好很明显的  遍历痕迹 , ...

  8. 【USACO 3.2】Factorials(阶层非零尾数)

    题意:输出n的阶层最后一个非0数. 题解:可以把5和2的个数算出来,每次把5和2都除掉,最后乘上比5多出来的2.我的解法是,每次把尾巴的0去掉,并且保留3位,算到最后取尾数就可以了.. /* TASK ...

  9. 【luoguP1219】【USACO】八皇后

    P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...

随机推荐

  1. 【Linux】计划任务

    计划任务的意义 计划任务 创建和管理在指定时间自动执行的任务 注意事项 要使任务计划在指定时间自动运行,计划任务的服务必须是启动的 计划任务分类 使用at命令调用atd进程设置在某个特定的时间,执行一 ...

  2. 课时87. !important(掌握)

    1.什么是important 作用:用于提升某个直接选中标签的选择器中的某个属性的优先级,可以将被指定的属性的优先级提升为最高. 注意点: 1.important只能用于直接选中,不能用于间接选中 p ...

  3. Redis 之持久化

    目录 一.前言 二.持久化类型之 RDB 三.持节化类型之AOF 四.Redis 持久化类型的抉择 五.持久化的恢复 六.持久化问题的分析定位与优化 七.回顾总结 一.前言 首先,来回顾下前面文章的知 ...

  4. Jquery中select使用

    select获取当前选中的value $('#DDLDEP').change(function () { var depId = $(this).children('option:selected') ...

  5. laravel5.5源码笔记(二、服务提供者provider)

    laravel里所谓的provider服务提供者,其实是对某一类功能进行整合,与做一些使用前的初始化引导工作.laravel里的服务提供者也分为,系统核心服务提供者.与一般系统服务提供者.例如上一篇博 ...

  6. Delphi获取Android下GPS的NMEA 0183数据

    下面的程序,可以实现Android下获取GNSS的NMEA0183数据: unit utAndroidNmea; interface uses Androidapi.JNIBridge, Androi ...

  7. 一种比使用协程更方便的方法:Invoke(),同样达到等待执行的效果

    1.Invoke(string methodName,float time) 在一定时间调用methodName函数 using UnityEngine; using System.Collectio ...

  8. Unity判断鼠标是否在UI(UGUI)上

    "EventSystem.current.IsPointerOverGameObject()" UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了 ...

  9. 以某课网日志分析为例 进入大数据 Spark SQL 的世界

    第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目中涉及的Hadoop. ...

  10. SpringBoot入门案例——创建maven Module方式

    最近看到一个大牛写的spring boot案例,链接贴这 https://github.com/ityouknow/spring-boot-examples.git 这里通过在maven里创建多个mo ...