2016-3-凑算式

B      DEF
A + --- + ------- = 10
     C      GHI
 6+8/3+952/714 就是一种解法,
 5+3/1+972/486 是另一种解法               这个算式共有多少种解法?

坑:通分后  能整除

#include<stdio.h>
#include<algorithm>
#include<iostream>
/*全排列 坑点:1.通分后可以整除(求余为0)  (a[1]*y+a[2]*x) % (a[2]*y) == 02.a[0]+通分后的一坨加和为10
*/
using namespace std;
int a[9] = {1,2,3,4,5,6,7,8,9};
int ans;bool check()
{int x = a[3]*100 + a[4]*10 + a[5];int y = a[6]*100 + a[7]*10 + a[8];if( (a[1]*y+a[2]*x) % (a[2]*y) == 0 && a[0] + (a[1]*y+a[2]*x) / (a[2]*y) == 10 ){return true;}return false;
}int main(int argc, char *argv[])
{do{if(check()){ans++;}}while(next_permutation(a,a+9));cout<<<<ans<<endl;
}

2013-9带分数

100 带分数的形式:100 = 3 + 69258 / 714

100 = 82 + 3546 / 197

注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。

100 有 11 种表示法。

/*
输入输出样例
100   11
105   6
2013  5
*/

思路:1-9全排列,先插入+,再插入/,验算等式,计数

#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<iostream>
#include<string>
using namespace std;
string s = "123456789";
int n,ans = 0;
/*const char *c_str();          返回一个指向正规C字符串的指针, 内容与本字符串相同. int atoi( const char *str );    将字符串str转换成一个整数并返回结果。*/bool check(int n)
{const char *arr = s.c_str();for(int i=1; i<=7; i++)     //+号前的串的长度 {//string a = s.substr(0,i);   //int inta = atoi(a.c_str());int inta = parse(arr,0,i);if( inta>=n ) continue;    //这个逻辑不能忘 break与continue区别 for(int j=1; j<=9-1-i; j++)   // +和/之间的串的长度{//string b = s.substr(i,j);//string c = s.substr(i+j,9-i-j);//   int intb = atoi(b.c_str());//  int intc = atoi(c.c_str());int intb = parse(arr,i,j); int intc = parse(arr,i+j,9-i-j);    //这是/后面的串if( inta+intb/intc==n && intb%intc==0 )  {return true;}}}
}int main(int argc, const char *argv[])
{scanf("%d",&n);do{if(check(n)){ans++;}}while(next_permutation(s.begin(), s.end()));cout<<ans<<endl;//cout<<parse(s.c_str(),2,4)<<endl;
}

(1)字符串的相关表示:

字符串的使用很重要,但是本题有坑,

不能反复截取字符串substr(申请内存空间新建串,拷贝) 所以尽量规避,运行超时   用字符数组处理

1 s.substr()  截取子串 s.substr(pos, n)    截取s中从pos开始(包括0)的n个字符的子串,并返回s.substr(pos)        截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回2 s.c_str(); 将字符串以C字符数组的形式返回  const char *c_str();           返回一个指向正规C字符串的指针, 内容与本字符串相同. 3 atoi()  将字符串转换成整数  int atoi( const char *str );   将字符串str转换成一个整数并返回结果。string a = s.substr(0,i);
int inta = atoi(a.c_str());4 next_permutation(s.begin(),s.end()) 字符串起始与终止位置表示 

(2)使用字符数组  将子串化为整数

/*手工从字符串pos开始,取长为len的子串,并将其化为整数传入字符数组型的字符串,位置,长度*/
int parse(const char *arr, int pos, int len)
{int t=1,num=0;for(int i=pos+len-1; i>=pos; i--){num += (arr[i]-'0')*t;t*=10;}return num;
}

(3)check()  i 和 j 代表的意义

i     +号前的串的长度

j     +和/之间的串的长度

注意字符数组下标,以及for循环起点和终点的条件

2015-5-九数组分数

1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?

模板:递归回溯求全排列   (递归,先纵后横 整体思维)  大赛十讲 递归框架

作用与next_permutation相同。

#include <stdio.h>
#include<algorithm>
void test(int x[])
{int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];if(a*3==b) printf("%d / %d\n", a, b);  //注意这种表示(a*3==b)
}
/*递归回溯生成全排列,适用于无重复元素 考虑第k位,前面已排定*/
void f(int x[], int k)
{int i,t;if(k>=9){    一种排列已经产生 test(x);return;}for(i=k; i<9; i++){{t=x[k]; x[k]=x[i]; x[i]=t;}   //递推 从k往后的每个数字尝试换到k的位置   交换   f(x,k+1);                    {t=x[k]; x[k]=x[i]; x[i]=t;}   //回溯 恢复到下探之前的状态} }int main()
{int x[] = {1,2,3,4,5,6,7,8,9};f(x,0); return 0;
}/*
5832 / 17496
5823 / 17469
*/

蓝桥杯——1-9凑等式(全排列)相关推荐

  1. 【蓝桥杯】 三行代码解决 “全排列的价值”(2022省赛pythonA组)

    三行代码解决 "全排列的价值"(2022省赛pythonA组) 置顶代码: from math import factorial n = int(input()) print(fa ...

  2. [蓝桥杯2016初赛]凑算式-dfs,next_permutation

    代码如下: #include <iostream> using namespace std; const int N = 15; bool st[N]; double a[N];int c ...

  3. 蓝桥杯2016初赛python题解

    前言:除特殊说明外题解均可AC 蓝桥杯2016初赛 [蓝桥杯2016初赛]网友年龄 [蓝桥杯2016初赛]生日蜡烛 [蓝桥杯2016初赛]方格填数 [蓝桥杯2016初赛]寒假作业 [蓝桥杯2016初赛 ...

  4. java蓝桥杯凑算是,第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)

    第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题,可以参见[图1.jpg]) 这个算式中AI代表19的数字,不同的字母代表不同的数字. ...

  5. java算法排列式_JAVA 蓝桥杯算法 全排列 背公式即可

    什么是全排列? 所谓全排列就是把几个字符或数字(以下称为元素),进行全部排列 例如:字符串 abc 那么就可以这样排abc acb bac bca cab cba 把全部元素能用到的排列方式进行全部排 ...

  6. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-Java全排列公式

    第十四届蓝桥杯集训--练习解题阶段(无序阶段)-Java全排列公式 前言 最近的一些文章都可能会很碎,写到哪里是哪里,过一阵子会具体的整理一遍,这里其它的类型题先往后排一排,因为蓝桥最后考的也就是对题 ...

  7. 蓝桥杯 笔记整理【JavaB组省赛真题、约数、全排列模板、排列组合、等差等比求和公式、eclipse快捷键、集合、快速求a^n、进制转换(Integer、BigInteger)、动态数组Vector】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  8. 蓝桥杯——Java中的全排列算法

    蓝桥杯--Java中的全排列 全排列的概念 排列 从n个数中选取m(m<=n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列.不同的顺序是一个不同的排列.从n个元素中取m ...

  9. c语言六角填数蓝桥杯答案,六角填数(全排列)蓝桥杯真题

    六角填数(全排列)蓝桥杯真题 六角填数(全排列)蓝桥杯真题 如图所示六角形中填入1-12的数字,使每条直线上的数字和相等,图中已经填好了3个数字,请你计算*号数字是多少 蓝桥杯老套路,经常这样考全排列 ...

最新文章

  1. oracle监听器动态注册于静态注册的区别
  2. 在C#中快速实现拖放操作
  3. 【Android 应用开发】Android - 时间 日期相关组件
  4. 【创业】史上最完整创业数据,30岁以下创业白皮书
  5. blockchain paper
  6. VTK:Texture之AnimateVectors
  7. linux制作成后台服务,把dotnetcore 控制台app设置成linux后台服务
  8. Computer Systems A Programmer's Perspective(深入理解计算机系统)第一章读书笔记
  9. Java NIO 读取文件、写入文件、读取写入混合
  10. 【马哥教育视频】cacti入门及进阶[已更新至第四段]
  11. oracle 11g新特性之IPS Packing demonstration
  12. python课程设计的心得体会_数据库课程设计心得体会精选篇
  13. 记录一次破解某加固APP的修改纪录
  14. 软件开发人员的能力模型
  15. 2018 PHP面试真题(包括详细解析)
  16. Matlab 图片批量复制到word中
  17. 智慧公厕,让厕所也成为城市文明的一部分
  18. 1149:最长单词2
  19. 十年磨一剑,霜刃未曾试(纪念最爱——加内特)
  20. keyshot分辨率多少合适_keyshot电脑配置浅谈

热门文章

  1. Linux 知:map文件
  2. 文件管理:文件存储空间管理
  3. 【ESP8266之AT开发】五、实战连接Yeelink云平台,实现远程控制
  4. Yeelink平台推送传感器结果——套接字编程 Windows平台
  5. php抓取公众号信息
  6. 项目管理的工作内容有哪些?
  7. 如何进行IT项目的需求调研
  8. 魔方的征途 - 魔方如何选择?
  9. HttpClient调用WebService接口
  10. 微信提现(V2版本)