蓝桥 凑平方数 (我依旧很菜)

简介: 蓝桥 凑平方数 (我依旧很菜)

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

再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376
等等...

注意,0可以作为独立的数字,但不能作为多位数字的开始。
分组时,必须用完所有的数字,不能重复,不能遗漏。

如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?


其实一开始i想到了要用next_permutation和dfs,但是具体的思路想不通。
看了学长的代码才会做。记录一下。

#include<cstdio>
#include<cmath>
#include<string>
#include<vector>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;

int a[20]={
   0,1,2,3,4,5,6,7,8,9};
set<string> st;
bool judge(ll x){
   
    if(!x)    return 1;
    ll tmp = (ll)sqrt(x);
    return tmp*tmp == x;
}
void dfs(int pos, vector<ll> v){
   
    if(pos == 10){
   
        sort(v.begin(),v.end());
        string ans="";
        for(int i=0; i<v.size(); i++){
   
            char t[32];
            sprintf(t, "%lld", v[i]);
            ans = ans +" "+t;
        }
        //cout<<ans<<endl;
        st.insert(ans);
        return;
    }
    ll tmp=0;
    if(a[pos]==0){
   
        v.push_back(0);
        dfs(pos+1,v);
    }else{
   
        for(int i=pos; i<=9; i++){
   
            tmp = tmp*10+a[i];
            if(judge(tmp)){
   
                v.push_back(tmp);
                dfs(i+1, v);
                v.pop_back();
            }
        }
    }
}
int main(){
   
    do{
   
        vector<ll> v;
        v.clear();
        dfs(0, v);
    }while(next_permutation(a, a+10));
    printf("%d\n", st.size());
    return 0;
}
相关文章
|
4月前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
|
算法 机器人 C语言
【二分查找】分巧克力、机器人跳跃、数的范围
开始准备蓝桥杯啦!这是计划的一部分,每天都会更新一个专题的内容,内容参考自acwing蓝桥杯辅导课,有兴趣的uu们也可以自行观看
102 0
|
4月前
|
C语言
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
|
4月前
特别数的和(蓝桥杯)
特别数的和(蓝桥杯)
|
数据采集 数据挖掘 Python
【每周一坑】乒乓数
刚从假期回来,又要迎接周末,各位看官想必都很辛苦,所以本周每周一坑为大家准备一道简单的甜点题目,本题取材于伯克利大学 CS61 课程 homework02。
|
测试技术
L2-003 月饼 (25 分)(贪心)
L2-003 月饼 (25 分)(贪心)
73 0
|
算法 索引
代码随想录训练营day34| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果...
代码随想录训练营day34| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果...
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
133 0
力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数
|
机器学习/深度学习 算法 安全
【Python 百练成钢】时间调整、二进制数、回文素数、字母距离、CTF、Huffuman树、抽奖、前后缀最值、纯质数求解、花园灌溉
【Python 百练成钢】时间调整、二进制数、回文素数、字母距离、CTF、Huffuman树、抽奖、前后缀最值、纯质数求解、花园灌溉
216 0
【Python 百练成钢】时间调整、二进制数、回文素数、字母距离、CTF、Huffuman树、抽奖、前后缀最值、纯质数求解、花园灌溉
|
存储 机器学习/深度学习 人工智能
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法
278 0
【Python 百练成钢】DNA、蛇形矩阵、Huffuman树、K-进制数、K倍区间、交换瓶子、第几个幸运数、四平方和、The 3n + 1 problem、大数乘法