问题描述

匪警请拨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
……

解决思路

其实一开始是没有啥思路的,在听了于航老师的讲解讲解之后星辰了自己的一点想法。

  1. 理解为一棵树,每棵树有三个节点,所依递归遍历;
  2. 可解节点应为算式的第一个元素即“   ”;
  3. 回溯状态恢复

易错点

  1. 对于c++在于字符串的处理    在这个题目中 主要用到了字符串的拼接;    (C++直接对+进行了重载     所以string s0= string s1+string s2是合法的)
  2. itom()函数  (https://baike.baidu.com/item/itoa%E5%87%BD%E6%95%B0)
  3. 将字符串转换为对应十进制数字  ( 在代码中有具体体现); 

代码解析 

#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++的更多相关文章

  1. 2012年 蓝桥杯预赛 java 本科 题目

    2012年 蓝桥杯预赛 java 本科 考生须知: l  考试时间为4小时. l  参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...

  2. 蓝桥杯-趣味算式-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  3. 算法笔记_226:填符号凑算式(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训 ...

  4. java实现趣味拼算式

    匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练! 某批警察叔叔正在进行智力训练: 1 2 3 4 ...

  5. Java实现填符号凑算式

    匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练! 某批警察叔叔正在进行智力训练: 1 2 3 4 ...

  6. MCC460MNC08

    因为搜得辛苦,正好也写点关于我morto工作有关的事情,给大家和我一样扫盲,哈哈   The GSM Mobile Country Code (MCC) is different from the i ...

  7. php微信开发 -- 两种运营模式及服务器配置

    微信的两种运营模式 编辑模式:使用微信公众平台提供的功能 开发者模式:通过腾讯的api接口调用相应程序进行二次开发 编辑模式 应用场景: l 不具备开发能力的运营者 l 主要是进行品牌宣传.新闻媒体. ...

  8. python 基础例子 双色球 查询天气 查询电话

    # 随机生成双色球import random# 随机数 1-16之间# r = random.randint(1,16)# print(r)phone_numbers_str = "匪警[1 ...

  9. C#夯实基础之多线程三:线程的优先级

    一.为什么需要优先级--线程调度的问题 在现实生活中,优先级是一个很常见的现象:在火车站,如果你是孕妇,你是可以走进站中的专门绿色通道的,可以提前上火车以免拥挤:火警119匪警110出警的时候,都是人 ...

随机推荐

  1. 波哥博客Url

    http://www.cnblogs.com/whatlonelytear/

  2. hdu4370 dijkstra矩阵转单向边最短路矩阵+自环闭环

    /* 矩阵太神奇了Orz,网上的题解大多是spfa,不过我发想dijkstra也能做 把n*n的矩阵看成是单向边距离矩阵就行 */ #include<iostream> #include& ...

  3. Jmeter中通过beanshell写入CSV的脚本

    import com.csvreader.CsvWriter; String NewDataPath=bsh.args[0]; NewDataPath=NewDataPath.replaceAll(& ...

  4. 浅拷贝和深拷贝(谈谈java中的clone)

    clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那么在java语言中,有 ...

  5. yarn的安装与使用及与npm对应的命令

    在Nodejs环境下,通过npm install -g yarn 命令进行全局安装 例如:yarn versionyarn inityarn installyarn add vueyarn add v ...

  6. 【Oracle】Linux7安装11g 86%报错:Error in invoking target 'agent nmhs' of makefile

    http://blog.itpub.net/29475508/viewspace-2120836/

  7. [转] mongoose学习笔记(超详细)

    名词解释 Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model: 由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为.Model的每一个实例(ins ...

  8. mysql inner jion多表查询

    select vtiger_users.id, vtiger_users.user_name, vtiger_role.rolename FROM vtiger_users inner join vt ...

  9. python之string模块常量:数字,26个字母,标点符号,空白

    In [8]: import string In [9]: dir(string) In [10]: string.ascii_letters Out[10]: 'abcdefghijklmnopqr ...

  10. NEST 之旅 · 开启

    NEST 之旅 · 开启 Version:5.x 英文原文地址:Getting started 说实话,这篇文章翻译的很糟糕.但是我的能力有限,目前只有这个水平,还望各位多指导. NEST 是 Ela ...