匪警请拨110——C++
问题描述
匪警请拨110,即使手机欠费也可拨通!
为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
某批警察叔叔正在进行智力训练:
1 2 3 4 5 6 7 8 9 = 110
请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。
请你利用计算机的优势,帮助警察叔叔快速找到所有答案。
每个答案占一行。形如:
12+34+56+7-8+9
123+4+5+67-89
……
解决思路
其实一开始是没有啥思路的,在听了于航老师的讲解讲解之后星辰了自己的一点想法。
- 理解为一棵树,每棵树有三个节点,所依递归遍历;
- 可解节点应为算式的第一个元素即“ ”;
- 回溯状态恢复
易错点
- 对于c++在于字符串的处理 在这个题目中 主要用到了字符串的拼接; (C++直接对+进行了重载 所以string s0= string s1+string s2是合法的)
- itom()函数 (https://baike.baidu.com/item/itoa%E5%87%BD%E6%95%B0)
- 将字符串转换为对应十进制数字 ( 在代码中有具体体现);
代码解析
#include<iostream>
#include<stdlib.h>//itoa()
#include<cstring>//便于字符串处理
#include<math.h>
using namespace std;
int a[]={,,,,,,,,};//解决该问题的数据结构
void Try(int k,string so,int goal ) //试探函数
{
// cout<<"Goal: "<<goal<<endl; //调试中使用的输出
if(k==) //递归出口
{
if(a[]==goal)//判断是否为问题的解
{
cout<<a[]<<so<<endl;
// getchar(); //调试中使用的暂停
}
return;
}
char temp_1[]; //整形量转换字符量做准备,一个容器
itoa(a[k],temp_1,); //比较实用的函数
string A;
A=temp_1+so;
A="+"+A; //拼接 数的第一个分支
// cout<<"A: "<<A<<endl;
Try(k-,A,goal-a[k]);//更新goal
char temp_2[];
itoa(a[k],temp_2,);
string B;
B=temp_2+so;
B="-"+B;
// cout<<"B: "<<B<<endl;
Try(k-,B,goal+a[k]); //数的第二个分支
int x=a[k-];
char lenth[];
int j;
itoa(a[k],lenth,); //这个非常重要,要根据实际a[k]的长度来更新a[k-1],我就是在这里出现了无数次错误!!!!
j=strlen(lenth);
a[k-]=a[k-]*pow(,j)+a[k];
// cout<<"so: "<<so<<endl;
Try(k-,so,goal);
/* for(int i=0; i<9; i++)
{
cout<<a[i]<<"\t";
}
cout<<endl;*/
a[k-]=x;//回溯状态恢复
}
int main()
{
Try(,"",);
return ;
} #include<iostream>
#include<stdlib.h>
#include<cstring>
#include<math.h>
using namespace std;
int a[]={,,,,,,,,};
void Try(int k,string so,int goal )
{
// cout<<"Goal: "<<goal<<endl;
if(k==)
{
if(a[]==goal)
{
cout<<a[]<<so<<endl;
// getchar();
}
return;
}
char temp_1[];
itoa(a[k],temp_1,);
string A;
A=temp_1+so;
A="+"+A;
// cout<<"A: "<<A<<endl;
Try(k-,A,goal-a[k]);
char temp_2[];
itoa(a[k],temp_2,);
string B;
B=temp_2+so;
B="-"+B;
// cout<<"B: "<<B<<endl;
Try(k-,B,goal+a[k]); int x=a[k-];
char lenth[];
int j;
itoa(a[k],lenth,);
j=strlen(lenth);
a[k-]=a[k-]*pow(,j)+a[k];
// cout<<"so: "<<so<<endl;
Try(k-,so,goal);
/* for(int i=0; i<9; i++)
{
cout<<a[i]<<"\t";
}
cout<<endl;*/
a[k-]=x;
}
int main()
{
Try(,"",);
return ;
}
运行结果

匪警请拨110——C++的更多相关文章
- 2012年 蓝桥杯预赛 java 本科 题目
2012年 蓝桥杯预赛 java 本科 考生须知: l 考试时间为4小时. l 参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...
- 蓝桥杯-趣味算式-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 算法笔记_226:填符号凑算式(Java)
目录 1 问题描述 2 解决方案 1 问题描述 匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训 ...
- java实现趣味拼算式
匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练! 某批警察叔叔正在进行智力训练: 1 2 3 4 ...
- Java实现填符号凑算式
匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练! 某批警察叔叔正在进行智力训练: 1 2 3 4 ...
- MCC460MNC08
因为搜得辛苦,正好也写点关于我morto工作有关的事情,给大家和我一样扫盲,哈哈 The GSM Mobile Country Code (MCC) is different from the i ...
- php微信开发 -- 两种运营模式及服务器配置
微信的两种运营模式 编辑模式:使用微信公众平台提供的功能 开发者模式:通过腾讯的api接口调用相应程序进行二次开发 编辑模式 应用场景: l 不具备开发能力的运营者 l 主要是进行品牌宣传.新闻媒体. ...
- python 基础例子 双色球 查询天气 查询电话
# 随机生成双色球import random# 随机数 1-16之间# r = random.randint(1,16)# print(r)phone_numbers_str = "匪警[1 ...
- C#夯实基础之多线程三:线程的优先级
一.为什么需要优先级--线程调度的问题 在现实生活中,优先级是一个很常见的现象:在火车站,如果你是孕妇,你是可以走进站中的专门绿色通道的,可以提前上火车以免拥挤:火警119匪警110出警的时候,都是人 ...
随机推荐
- 2017-2018-2 20165314 实验三《 敏捷开发与XP实践》实验报告
知识点: 1.XP团队使用现场客户.特殊计划方法和持续测试来提供快速的反馈和全面的交流: -XP是以开发符合客户需要的软件为目标而产生的一种方法论 -XP是一种以实践为基础的软件工程过程和思想 -XP ...
- shell 判断文件夹或文件是否存在
文件夹不存在则创建 if [ ! -d "/data/" ];then mkdir /data else echo "文件夹已经存在" fi 文件存在则删除 i ...
- js获取url协议、url, 端口号等信息路由信息
以路径为 http://www.baidu.com 为例 console.log("location:"+window.location.href); >> &quo ...
- C++ Primer 笔记——智能指针
1.新的标准库提供了两种智能指针类型,shared_ptr允许多个指针指向同一个对象,unique_ptr则独占所指的对象.标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shar ...
- 微信JSAPI分享朋友圈调试经验:invalid signature签名错误排查
.invalid signature签名错误.建议按如下顺序检查: 1.确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapi ...
- ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN DESC)函数的使用
ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN DESC)函数的作用是指定COLUMN(列)进行分区,在分区内指定COLUMN(列)进行排序 ...
- DevExpress中的GridControl控件设置了列Readonly后,想双击弹出明细的实现
OptionsBehavior.Editable = true时,会有二个对象触发事件:view触发ShownEditor 事件(第一单击时)和内置编辑器的DoubleClick事件所以必须处理这二个 ...
- BZOJ 1706
题解: 倍增+floyd 首先这题比较容易想到是把每个点拆点做dij 但是这样复杂度是knlogn的 这道题的k较大,所以不行 我们考虑到每走一步,其实就是在进行一次floyd 而这个可以看成矩阵乘法 ...
- Elasticsearch - Scroll
Scroll Version:6.1 英文原文地址:Scroll 当一个搜索请求返回单页结果时,可以使用 scroll API 检索体积大量(甚至全部)结果,这和在传统数据库中使用游标的方式非常相似. ...
- grails服务端口冲突解决办法-【grails】
grails中默认的服务端口为,当本机中需要同时启动两个不同的项目时,就会造成端口冲突,比如启动第二个服务时就会报如下的错误: Server failed to start for port 8080 ...