码迷,mamicode.com
首页 > 其他好文 > 详细

凑平方数

时间:2020-07-10 00:17:23      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:ble   个数   for   cst   copy   ==   main   type   不能   

题目:把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。比如:0, 36, 5948721

再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376等等
注意,0可以作为独立的数字,但不能作为多位数字的开始。
分组时,必须用完所有的数字,不能重复,不能遗漏。如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?

思路:第一步0到9全排列 next_permutation(arr, arr + 10)对arr内10个元素进行全排列

第二步 对每一次的排列结果分析(也就是怎么分组),比如1, 25, 6390784  这个结果,全排列出来应该是1256390784 ,这一步就是搜索这个排列结果 可能成功的分组

 1 #include<iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include<algorithm>
 5 #include<map>
 6 #include<set>
 7 #include<string>
 8 #define maxn 100010
 9 using namespace std;
10 typedef long long LL;
11 int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
12 long long nums[10];//用于存放平方数,最多是个单独排放
13 //set容器是一颗平衡搜索树,元素唯一且默认升序排列
14 set<string> res;
15 bool issquare(long long num) {
16     double d = sqrt(num);
17     return d == (long long)d;
18 }
19 //n表示从下标为n开始往后存在的平方数记录到nums数组内
20 void dfs(int i, int n) {
21     if (i == 10) {         //i=10表示已经搜索到结束的位置
22         long long nums_t[10];
23         copy(nums, nums + n, nums_t);
24         sort(nums_t, nums_t + n);//统一从小到大排序
25         string s;
26         for (int j = 0; j < n; ++j) {
27             s += to_string(nums_t[j]) + ,;
28         }
29         res.insert(s);
30         return;
31     }
32 
33     if (arr[i] == 0) {
34         nums[n] = 0;//0单独成一组,不能成为别人的平方数
35         dfs(i + 1, n + 1);
36         return;
37     }
38 
39     long long num = 0;
40     for (int j = i; j < 10; ++j) {
41         num = num * 10 + arr[j];
42         if (issquare(num)) {
43             nums[n] = num;//记录平方数数据
44             dfs(j + 1, n + 1);
45         }
46     }
47 }
48 
49 int main() {
50     do {
51         dfs(0, 0);
52     } while (next_permutation(arr, arr + 10));
53     cout << res.size() << endl;//容器大小
54     return 0; 
55 }

 

凑平方数

标签:ble   个数   for   cst   copy   ==   main   type   不能   

原文地址:https://www.cnblogs.com/0211ji/p/13276941.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!