题目:

凑平方数
把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够
办到的。比如:0, 36, 5948721再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376
等等…注意,0可以作为独立的数字,但不能作为多位数字的开始。
分组时,必须用完所有的数字,不能重复,不能遗漏。如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?注意:需要提交的是一个整数,不要填写多余内容。

解题思路:
先用全排列列举出所有可能的序列,然后对每一个序列使用dfs搜索平方数组,接着最后使用set容器的特点进行查重。

注意问题:
1.排序的时候不要直接对原数组进行排序,否则回溯后会影响之前的数
2.用string保存每一组情况,两个数之间需要用一个标记(‘-’)进行分隔
3.数的范围可能会超过int,所以使用long long类型

思路链接:https://blog.csdn.net/luoluozlb/article/details/72581286

代码如下:

#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
#include <set>
using namespace std;
int a[] = {0,1,2,3,4,5,6,7,8,9};
typedef long long LL;
const int N = 20;
LL used[N];
LL tmp[N];//数字很大,要用longlong来存set<string>ans;
int k;
void dfs(int u)
{if (u==10){string str = "";copy(used,used+k,tmp);
//      for (int i = 0;i<k;i++)
//      {//          cout<<tmp[i]<<" ";
//      }
//      cout<<endl;sort(tmp,tmp+k);//要排序,不然会因为顺序不同,导致很多一样的情况都重复算了for (int i = 0;i<k;i++){char s[20];sprintf(s,"%lld",tmp[i]);str+=s;str+='-';//每组之间拿-隔开}
//      cout<<str<<endl;ans.insert(str);return ;}if (a[u]==0)//0不能为数字开头,所以我们这样处理{used[k++] = 0;dfs(u+1);used[--k] = 0;}else {LL t = 0;for (int i = u;i<10;i++ ){t = t*10+a[i];LL x = sqrt(t);if (x*x==t){used[k++] = t;dfs(i+1);used[--k] = 0;}}}
}int main()
{do{k = 0;dfs(0);}while(next_permutation(a,a+10));cout<<ans.size()<<endl;return 0;
}

第七届蓝桥杯决赛真题 - 凑平方数-全排列+dfs+set去重相关推荐

  1. 第六届蓝桥杯决赛真题:穿越雷区

    题目描述: 穿越雷区 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才 ...

  2. 数苹果-第11届蓝桥杯Scratch真题

    数苹果,第11届蓝桥杯Scratch编程创作题,出现在2020年8月STEMA考试中.涉及到的知识点有坐标.随机数.问答.广播事件.变量和克隆等. 编程实现 数苹果:苹果树上会随机出现1-10个苹果, ...

  3. 第十四届蓝桥杯三月真题刷题训练——第 23 天

    目录 第 1 题:长草 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:蓝肽子序列_LCS_最长公共子序列dp问题 题目描述 输入描述 输出描述 输入输出样例 运行限 ...

  4. 第十四届蓝桥杯三月真题刷题训练——第 13 天

    目录 第 1 题:特殊日期 问题描述 答案提交 运行限制 代码: 思路: 第 2 题:重合次数 问题描述 答案提交 运行限制 代码: 第 3 题:左移右移 问题描述 输入格式 输出格式 样例输入 样例 ...

  5. 第十四届蓝桥杯三月真题刷题训练——第 9 天

    第 1 题:找素数 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 素数就是不能再进行等分的整数.比如:7,11.而 9 不是素数,因为它可以平分为 3 等份.一般 ...

  6. 第十四届蓝桥杯三月真题刷题训练——第 22 天

    目录 第 1 题:受伤的皇后_dfs 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 ...

  7. 第十四届蓝桥杯三月真题刷题训练——第 14 天

    目录 第 1 题:组队 题目描述 运行限制 代码: 第 2 题:不同子串 题目描述 运行限制 代码: 思路: 第 3 题:等差数列 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: ...

  8. 第十四届蓝桥杯三月真题刷题训练——第 20 天

    目录 第 1 题:纸张尺寸 问题描述 输入格式 输出格式 样例输入1 样例输出1 样例输入 2 样例输出 2 运行限制 代码: 解析: 第 2 题:最大数字 第 3 题:全排列的价值_递推公式 问题描 ...

  9. 第十四届蓝桥杯三月真题刷题训练——第 15 天

    目录 第 1 题:斐波那契与7 问题描述 答案提交 运行限制 代码: 第 2 题:小蓝做实验 问题描述 答案提交 运行限制 代码: 第 1 题:斐波那契与7 问题描述 斐波那契数列的递推公式为: Fn ...

最新文章

  1. VDI序曲二十一 APP-V 4.6 SP1服务器端部署
  2. Storm Trident示例function, filter, projection
  3. spring控制并发数的工具类ConcurrencyThrottleSupport和ConcurrencyThrottleInterceptor
  4. HTML基础_Day03
  5. 深入理解Python中的生成器
  6. xmu 1254.异或求和
  7. 查找单项链表中间元素,若有相同,取第一个
  8. C++ STL unordered_map按照value排序
  9. 工欲善其事必先利其器——dreamweaver
  10. vscode settings.json配置
  11. 【VC++类型转换】CString类型到Char[]类型的转换
  12. 算法:回溯和动态规划解决每次移动一步最终回到原地1269. Number of Ways to Stay in the Same Place After Some Steps
  13. C# 使用RestSharp库实现POST请求
  14. 五线谱中蕴含的数学问题
  15. 还在迷茫?还在纠结考研还是就业?我来替你分析一下
  16. 风云格式工厂隐私政策
  17. go : go-redis 基础操作
  18. 激光位移传感器与其他位移传感器比较
  19. C|倒三角(trangle)
  20. windows已经阻止此软件因为无法验证发行者

热门文章

  1. C#子窗体运行时无法正常最大化的解决办法
  2. Failed:(13: Permission denied)导致访问浏览器出现Nginx 500 Internal Server Error
  3. C语言试题四十四之移动一维数组中的内容,若数组中由n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。
  4. C和指针之编译出现warning: implicit declaration of function ‘matrix_multiply‘ is invalid in C99问题
  5. C语言之unsigned char和uint8_t
  6. Android之在后台不显示activity方法
  7. 小米android系统耗电量大,小米手机耗电快的解决方法,亲测有效~
  8. lia人是什么意思_狗狗喜欢舔人到底什么意思?毛孩的心思主人你要懂
  9. mysql与oracle在软件测试_Oracle和MySQL的一些简单命令对比
  10. echarty轴自定义显示不全_表格打印不全怎么办?这招超简单!