匪警请拨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出警的时候,都是人 ...
随机推荐
- java web----URL
简单使用 import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; im ...
- django----多对多数据添加
class UserInfo(models.Model): """ 用户表:既有班主任也有老师 """ username = models. ...
- 解决beego中同时开启http和https时,https端口占用问题
在beego的app.go文件中, 找到 // run normal mode if BConfig.Listen.EnableHTTPS { go func() { time.Sleep( * ti ...
- tomcat启动报错:Annotation-specified bean name 'patrolTrailServiceImpl' for bean class [cn.oppo.inventoryService.patrolTrailServiceImpl] con
注释-为bean类[目录服务patrolTrailServiceImpl]指定的bean名称“patrolTrailServiceImpl”与同名和[目录服务patrolTrailServiceImp ...
- java读取.txt文件工具类FileUtiles
public class FileUtils { private static final String ENCODING = "UTF-8";//编码方式 /** * 获取文件的 ...
- ZOJ 3785 What day is that day?(数论:费马小定理)
What day is that day? Time Limit: 2 Seconds Memory Limit: 65536 KB It's Saturday today, what da ...
- 华为设备默认console密码
admin@huawei.com Admin@huawei.com Admin@huawei huawei.com huawei@123 huawei Change_Me
- pp 总结一
1.JQ $.get() <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- php让一个数组按照另外一个数组的键名进行排序
$a = [ 'id', 'name', 'identityId', 'phone', 'email', 'schoolId' ]; $b = [ 'id' => '唯一标识', 'identi ...
- 【BZOJ3252】攻略
题解: 首先贪心的会发现我们每次一定会选当前权值和最大的那个 然后在于怎么维护这个最大值 我们发现每个修改实际上是对沿途所有点的子树的修改 所以用线段树维护就可以了.. 另外注意有重复部分,但一定是包 ...