zoukankan      html  css  js  c++  java
  • 凑平方数

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

    再比如:

    1098524736
    1, 25, 6390784
    0, 4, 289, 15376
    

    等等...

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

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

    注意:需要提交的是一个整数,不要填写多余内容。

    答案:

    先找出所有的范围内无重复数字的平方数,并记录位数,然后dfs。

    代码:

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    typedef long long ll;
    ll s[1000];
    int nu[1000];
    int ans,c;
    bool vi[10];
    void in(ll k,bool va) {
        do {
            vi[k % 10] = va;
            k /= 10;
        }
        while(k);
    }
    bool check(ll k) {
        bool vis[10] = {false};
        while(k) {
            if(vis[k % 10]) return false;
            vis[k % 10] = true;
            k /= 10;
        }
        return true;
    }
    bool check1(ll k) {
        do {
            if(vi[k % 10]) return false;
            k /= 10;
        }
        while(k);
        return true;
    }
    void dfs(int num,int k) {
        if(!num) {
            ans ++;
            return;
        }
        for(int i = k;i < c;i ++) {
            if(nu[i] > num) return;
            if(check1(s[i])) {
                in(s[i],true);
                dfs(num - nu[i],i + 1);
                in(s[i],false);
            }
        }
    }
    int main() {
        nu[c ++] = 1;
        for(ll i = 1;i * i <= 9876543210;i ++) {
            if(check(i * i)) {
                nu[c] = log10(i * i) + 1;
                s[c ++] = i * i;
            }
        }
        dfs(10,0);
        cout<<ans;
    }
  • 相关阅读:
    我的2015---找寻真实的自己
    JQuery日记 5.31 JQuery对象的生成
    UVA
    elk 日志分析系统Logstash+ElasticSearch+Kibana4
    OAF 中下载使用XML Publisher下载PDF附件
    page上BeanId与ActionType中的ParameterId
    OAF 功能中的参数含义
    EBS管理员为供应商创建新联系人流程
    EBS Workflow参考资料
    采购模块设置快码
  • 原文地址:https://www.cnblogs.com/8023spz/p/10545780.html
Copyright © 2011-2022 走看看