XDOJ 172-构造表达式
这个题作为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-构造表达式相关推荐
- #XDOJ 172 构造表达式
先贴一下问题 构造表达式 类别 综合 时间限制 1S 内存限制 100Kb 问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入'+','-',' ' 构造 ...
- XDOJ.172 构造表达式
题目描述: 标题 构造表达式类别 综合时间限制 1S内存限制 100Kb问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入'+','-',' '构造表达式 ...
- 成绩处理C语言xdoj,xdoj五星题172 构造表达式(递归思路)
xdoj五星题172 构造表达式 标题 构造表达式 类别 综合 时间限制 1S 内存限制 100Kb 问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入' ...
- XDOJ-172构造表达式
标题 构造表达式类别 综合时间限制 1S内存限制 100Kb问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入'+','-',' '构造表达式,插入' ' ...
- 【XDOJ】五星级题目--构造表达式之思路分享
[XDOJ]五星级题目–构造表达式之思路分享 题目: 构造表达式 问题描述 给定一个表示序列长度的整数n(3<=n<=9).在序列1 2 3-n中插入'+','-',' '构造表达式,插入 ...
- c语言后缀表达式构造二叉树,C ++程序为后缀表达式构造表达式树
表达式树基本上是用于表示表达式的二叉树.在表达式树中,节点对应于运算符,每个叶节点对应于操作数.这是一个C ++程序,用于按顺序,前顺序和后顺序遍历为后缀表达式构造一个表达式树. 算法Begin Fu ...
- python构造一个二叉树_二叉树-链表存储,用二叉树构造表达式(Python实现)
既然用到二叉树了,直观上链表的方式比较容易接受,下面用python实现简单的二叉树.二叉树是递归结构,Python的list也是递归结构,基于list类型很容易实现二叉树: 下面是函数 def bin ...
- mysql构造函数_MySQL行构造器表达式优化(Row Constructor Expression)
mysql 官方文档行构造器表达式优化(Row Constructor Expression Optimization)这一节里面,对行构造表达式及其优化进行了介绍,因为用的不多,也没太关注过.但是看 ...
- Lambda 表达式(=):网络摘抄,自学用,侵删。
Lambda 表达式 Lambda 表达式"是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型. 所有 Lambda 表达式都使用 Lambda 运算符 => ...
最新文章
- eclipse关闭mysql数据库,有关于用eclipse连接mysql数据库出现的问题以及解决办法
- python3 pip3 install 报错 ModuleNotFoundError: No module named ‘_ctypes‘ 解决方法
- OpenGL 调试Debugging
- Oracle命令(二):Oracle数据库几种启动和关闭方式
- 独占线程太多怎么办_电脑内存被占用太多怎么办?
- 【转载】COM 组件设计与应用(二)——GUID 和 接口
- SOA项目技术实施指南
- docker: Error response from daemon: driver failed programming external connectivity on endpoint mys
- 神经网络量化--per-channel量化
- 平板如何下载鸿蒙系统,鸿蒙系统2.0
- 用MapReduce统计微博的粉丝数,加上博主的昵称
- 微信文章如何采集php,记录微信公众号历史文章采集(二、js代码完善和数据库建立)...
- rsync同步+inotify实时同步部署
- Flutter:Dialog弹窗设置点击空白处不关闭弹窗
- 如何向外行解释你为什么想打产品经理?
- 基于SSM框架便利店管理系统(进销存管理系统)(java+spring+springmvc+mybatis+maven+mysql+html)
- Java 开发工具包
- 京东程序员压力太大在网页植入骂人代码?官方辟谣!
- 美通企业日报 | 海信发布中国首款社交电视;阿里与VEX将成立高校机器人联盟...
- 【分享】高精度RTK定位解决方案
热门文章
- <sub>和<sup>标签
- python安装第三方库遇到 ERROR: Command errored out with exit status 1:
- 《嵌入式Linux系统开发:基于 Yocto Project》笔记
- 阅读笔记 |《科学史和科学哲学导论》舒斯特
- 新车提车需要的注意事项,你了解吗?
- Cadence Allegro 17.4学习记录开始05-制作封装插件2.54间距排针为例
- Windows系统下cmd中直接返回根目录
- 基于51单片机的串口中断读头写尾法接收NMEA0183经纬度信息 1602显示(循环接收)
- 实时动态(RTK)定位技术介绍
- Java限流解决方案