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

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

把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;
}
相关文章
|
关系型数据库 MySQL 索引
936. 【mysql】locate函数
936. 【mysql】locate函数
515 2
|
11月前
|
安全 Java 程序员
《从头开始学java,一天一个知识点》之:控制流程:if-else条件语句实战
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《for与while循环的使用场景》。 ---
243 19
|
数据挖掘 BI
大模型时代下的智能数据分析
在大模型时代,智能数据分析成为企业提升效率的关键。2024年,市场逐渐回归应用本质,客户更关注模型如何落地日常业务。瓴羊Quick BI智能小Q助手接入通义千问大模型能力,提供对话式报表搭建、一键换肤美化、智能洞察归因等高效功能,助力企业数字化转型,引领数据消费新范式。
266 4
|
数据采集 运维 前端开发
【Java】全套云HIS源码包含EMR、LIS (医院信息化建设)
系统技术特点:采用前后端分离架构,前端由Angular、JavaScript开发;后端使用Java语言开发。
381 6
|
SQL 前端开发
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(五)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(五)
695 0
|
供应链 安全 物联网
未来技术浪潮:区块链、物联网与虚拟现实的融合与创新
在科技飞速发展的今天,新兴技术如区块链、物联网(IoT)、和虚拟现实(VR)正在重塑我们的世界。这些技术不仅各自发展迅速,更在交汇融合中催生出新的应用场景和商业模式。本文将深入探讨这些技术的发展趋势,并分析它们如何相互促进,共同推动社会进步。通过数据支撑、科学理论和逻辑推理,我们将揭示这些技术背后的潜力,以及它们对未来世界的深远影响。
|
开发框架 JavaScript 前端开发
Vue&Element开发框架中增加工作流处理,查看申请单中整合多个处理类型的处理
Vue&Element开发框架中增加工作流处理,查看申请单中整合多个处理类型的处理
|
存储 监控 关系型数据库
ELK架构监控MySQL慢日志
ELK架构监控MySQL慢日志
|
Linux
CentOS7使用mount命令来挂载CDROM
CentOS7使用mount命令来挂载CDROM 命令:mount -t auto /dev/cdrom /mnt/cdrom 这命令就是把CentOS CDROM挂载在/mnt/cdrom目录中,这样我们就可以访问光盘里面的内容了。
1331 0

热门文章

最新文章