这个题作为oj上少有的五星题,难倒了大部分同学(包括我),好几次都是这做,但是总不能全对,我又在网上找了些大佬的经验,经过大佬的指导,我这才写完,总之就是函数递归的运用,好啦废话到此为止。

问题描述    
给定一个表示序列长度的整数n(3<=n<=9)。在序列1 2 3…n中插入‘+’,‘-’,‘ ’构造表达式,插入‘ ’表示前后两个数字构成一个整数,例如1 2 -3 -4 -5=0。
输出构造的所有表达式中,结果为0的表达式的数量,例如n=3时,只有表达式1+2-3=0,输出结果为1。

输入说明    
输入数据为一个整数n(n<10),表示序列长度,同时表示输入序列为“1 2 3…n”。

输出说明    
对于每一组数据,输出一个整数,表示构造的表达式中结果为0的表达式数量。

输入样例    
3

输出样例    
1

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h> int num();
int Op();
void calculate();
void search(int pos); int n;
char op[9];
int idx;
int cnt;
//定义全局变量初值默认为0;
int main()
{scanf("%d", &n);search(0);printf("%d\n",cnt);return 0;
}int num()
{//此处的idx+1,idx+2指代的是操作符左右两边的数字 int d = idx+1;while(op[idx]==' '&&idx<n-1){d=d*10+(idx+2);idx++;} return d;
}int Op()
{//这里的数值在后面的运算中充当了符号 if(idx>=n-1){return 0;}if(op[idx]=='+'){idx++;return 1;} if(op[idx]=='-'){idx++; return -1; }return 0;
}void calculate()
{int sum = 0;int flag;idx = 0;sum = num();
//  printf("%d\n",sum); while(1){flag = Op();if(flag == 0){break; }else{sum += flag*num(); }}if(sum==0){cnt++;}
}void search(int pos)
{if(pos==n-1){//满足条件就可以进行运算 calculate();}else{op[pos]=' ';search(pos+1);op[pos]='+';search(pos+1);op[pos]='-';search(pos+1);}
}

还有一个通过数学归纳得出的方法,至于如何推出来的,俺就不在此絮叨了,有兴趣的uu们可以拿张纸尝试推下。

#include <stdio.h>int main()
{int n;scanf("%d", &n);if(n>=3&&n<=6) printf("1");if(n==7)    printf("6");if(n==8)    printf("10");if(n==9)   printf("11");return 0;
}

XDOJ 172-构造表达式相关推荐

  1. #XDOJ 172 构造表达式

    先贴一下问题 构造表达式 类别 综合 时间限制 1S 内存限制 100Kb 问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入'+','-',' ' 构造 ...

  2. XDOJ.172 构造表达式

    题目描述: 标题 构造表达式类别 综合时间限制 1S内存限制 100Kb问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入'+','-',' '构造表达式 ...

  3. 成绩处理C语言xdoj,xdoj五星题172 构造表达式(递归思路)

    xdoj五星题172 构造表达式 标题 构造表达式 类别 综合 时间限制 1S 内存限制 100Kb 问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入' ...

  4. XDOJ-172构造表达式

    标题 构造表达式类别 综合时间限制 1S内存限制 100Kb问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入'+','-',' '构造表达式,插入' ' ...

  5. 【XDOJ】五星级题目--构造表达式之思路分享

    [XDOJ]五星级题目–构造表达式之思路分享 题目: 构造表达式 问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入'+','-',' '构造表达式,插入 ...

  6. c语言后缀表达式构造二叉树,C ++程序为后缀表达式构造表达式树

    表达式树基本上是用于表示表达式的二叉树.在表达式树中,节点对应于运算符,每个叶节点对应于操作数.这是一个C ++程序,用于按顺序,前顺序和后顺序遍历为后缀表达式构造一个表达式树. 算法Begin Fu ...

  7. python构造一个二叉树_二叉树-链表存储,用二叉树构造表达式(Python实现)

    既然用到二叉树了,直观上链表的方式比较容易接受,下面用python实现简单的二叉树.二叉树是递归结构,Python的list也是递归结构,基于list类型很容易实现二叉树: 下面是函数 def bin ...

  8. mysql构造函数_MySQL行构造器表达式优化(Row Constructor Expression)

    mysql 官方文档行构造器表达式优化(Row Constructor Expression Optimization)这一节里面,对行构造表达式及其优化进行了介绍,因为用的不多,也没太关注过.但是看 ...

  9. Lambda 表达式(=):网络摘抄,自学用,侵删。

    Lambda 表达式 Lambda 表达式"是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型. 所有 Lambda 表达式都使用 Lambda 运算符 => ...

最新文章

  1. eclipse关闭mysql数据库,有关于用eclipse连接mysql数据库出现的问题以及解决办法
  2. python3 pip3 install 报错 ModuleNotFoundError: No module named ‘_ctypes‘ 解决方法
  3. OpenGL 调试Debugging
  4. Oracle命令(二):Oracle数据库几种启动和关闭方式
  5. 独占线程太多怎么办_电脑内存被占用太多怎么办?
  6. 【转载】COM 组件设计与应用(二)——GUID 和 接口
  7. SOA项目技术实施指南
  8. docker: Error response from daemon: driver failed programming external connectivity on endpoint mys
  9. 神经网络量化--per-channel量化
  10. 平板如何下载鸿蒙系统,鸿蒙系统2.0
  11. 用MapReduce统计微博的粉丝数,加上博主的昵称
  12. 微信文章如何采集php,记录微信公众号历史文章采集(二、js代码完善和数据库建立)...
  13. rsync同步+inotify实时同步部署
  14. Flutter:Dialog弹窗设置点击空白处不关闭弹窗
  15. 如何向外行解释你为什么想打产品经理?
  16. 基于SSM框架便利店管理系统(进销存管理系统)(java+spring+springmvc+mybatis+maven+mysql+html)
  17. Java 开发工具包
  18. 京东程序员压力太大在网页植入骂人代码?官方辟谣!
  19. 美通企业日报 | 海信发布中国首款社交电视;阿里与VEX将成立高校机器人联盟...
  20. 【分享】高精度RTK定位解决方案

热门文章

  1. <sub>和<sup>标签
  2. python安装第三方库遇到 ERROR: Command errored out with exit status 1:
  3. 《嵌入式Linux系统开发:基于 Yocto Project》笔记
  4. 阅读笔记 |《科学史和科学哲学导论》舒斯特
  5. 新车提车需要的注意事项,你了解吗?
  6. Cadence Allegro 17.4学习记录开始05-制作封装插件2.54间距排针为例
  7. Windows系统下cmd中直接返回根目录
  8. 基于51单片机的串口中断读头写尾法接收NMEA0183经纬度信息 1602显示(循环接收)
  9. 实时动态(RTK)定位技术介绍
  10. Java限流解决方案