把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。
比如:0, 36, 5948721
再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376
等等...
注意,0可以作为独立的数字,但不能作为多位数字的开始。
分组时,必须用完所有的数字,不能重复,不能遗漏。
如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?
注意:需要提交的是一个整数,不要填写多余内容。
仍然没什么思路 很久没写代码 真的都退化了
代码来源:https://blog.csdn.net/riba2534/article/details/72480145
1 #include <bits/stdc++.h> 2 #define ll long long 3 4 using namespace std; 5 6 int a[10] = {0,1,2,3,4,5,6,7,8,9}; 7 ll n1[10]; 8 set<string>s; 9 10 void dfs(int step,int num) 11 { 12 if(step == 10) // 用完了10个数 13 { 14 ll n2[10]; 15 for(int i = 0;i < num;i++) 16 { 17 n2[i] = n1[i]; 18 } 19 sort(n2,n2+num); 20 string xu; 21 char str[100]; 22 for(int i = 0;i < num;i++) 23 { 24 sprintf(str,"%lld",n2[i]); // 转换成字符串 25 xu += str; 26 xu += "-"; 27 } 28 cout << xu << endl; 29 s.insert(xu); 30 return ; 31 } 32 if(a[step] == 0) 33 { 34 n1[num] = 0; 35 dfs(step+1,num+1); 36 } 37 else 38 { 39 ll sum = 0; 40 for(int i = step;i < 10;i++) 41 { 42 sum = sum*10+a[i]; // 算出当前所得到的值 43 double son = sqrt(sum); 44 if(son == (int)son) 45 { 46 n1[num] = sum; 47 dfs(i+1,num+1); 48 } 49 } 50 } 51 } 52 53 int main() 54 { 55 do 56 { 57 memset(n1,0,sizeof(n1)); 58 dfs(0,0); 59 } 60 while(next_permutation(a,a+10)); 61 cout << s.size() << endl; 62 return 0; 63 }
【蓝桥杯】第七届国赛C语言B组 2.凑平方数(dfs+STL)
原文:https://www.cnblogs.com/duny31030/p/9071537.html