匪警请拨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出警的时候,都是人 ...
随机推荐
- 安装mysql后在/var/log/mysqld.log 中找不到临时密码
centos7通过yum装完mysql,使用grep 'temporary password' /var/log/mysqld.log找不到root密码打开mysqld.log中根本没有tempora ...
- 打包谷歌浏览器 Chrome 已安装的插件
环境: OS - win7 64bit 旗舰版 Chrome - 37.0.2062.120 m 以 Smooth Gestures (一款鼠标手势插件)为例,在扩展程序面板 chrome://ext ...
- SSM + Android 网络文件上传下载
SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...
- Mysql定时清空表
1.设置开启event scheduler SET GLOBAL event_scheduler=1; 2.验证event_scheduler是否已经开启 show variables like ...
- C#通讯录——Windows Form Contact List
C#通讯录 Windows Form Contact List 主窗口 using System; using System.Collections.Generic; using System.Com ...
- MongDb介绍及简单实用
一:介绍 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C ...
- Tarjan算法【强连通分量】
转自:byvoid:有向图强连通分量的Tarjan算法 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树.搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断 ...
- NEST - 返回部分文档
Selecting fields to return Version:5.x 英文原文地址:Selecting fields to return 有时候,不需要让 Elasticsearch 返回查询 ...
- appstore跳转
二维码跳转 https://itunes.apple.com/cn/app/id123123123 应用内跳转 this.alertCtrl.create({ title: '更新', message ...
- Python学习(二十九)—— pymysql操作数据库优化
转载自:http://www.cnblogs.com/liwenzhou/articles/8283687.html 我们之前使用pymysql操作数据库的操作都是写死在视图函数中的,并且很多都是重复 ...