zoukankan      html  css  js  c++  java
  • 【蓝桥杯】第七届国赛C语言B组 2.凑平方数(dfs+STL)

    把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 }
    文章搬运自我的个人博客http://duny31030.top 原博客为静态博客,因备份丢失无法继续更新,所以又搬运回博客园,可能部分文章阅读体验不好,可以到我的静态博客搜索相同标题查看
  • 相关阅读:
    c语言 判断文件是否存在
    lua 二进制函数使用
    linux sort 多列正排序,倒排序
    free命令学习 输出理解
    nginx 配置实现逻辑预算
    nginx 使用ctx实现数据共享,修改上下文
    lua中的数学库
    tornado文件上传实例
    ajax技术初识与应用
    web框架--XSS攻击和CSRF请求伪造
  • 原文地址:https://www.cnblogs.com/duny31030/p/9071537.html
Copyright © 2011-2022 走看看