道友给看了一道题目,就记录一下吧

题目:

给你0,1,2,3,4,5,6,7,8,9十个数字,要你选出任意一个或几个组合在一起成为完全平方数,每个数字都必须选且只能选一次,求可能的方案。

比如有其中几种符合题意的情况:

0 16 25 73984

0 1 625 73984

0 4 16 537289

0 16 784 5329

0 25 784 1936

思路:先打表,然后再深搜

答案:300

代码:

  1. #include<iostream>
  2. #include<string>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<map>
  6. #include<cstdio>
  7. #include<cstdlib>
  8. #include<cstring>
  9. #include<cstring>
  10. #include<cmath>
  11. using namespace std;
  12. typedef long long ll;
  13. const ll maxn=9876543210;
  14. ll maxnum=sqrt(maxn)+1;
  15. vector<ll> ans;
  16. ll res[100];
  17. bool flag[10];
  18. int sum=0;
  19. bool check(ll x) {
  20. bool judge[10];
  21. memset(judge,false,sizeof(judge));
  22. ll temp=x;
  23. while(temp) {
  24. if(judge[temp%10]==true) return false;
  25. judge[temp%10]=true;
  26. temp/=10;
  27. }
  28. if(x/10*10==x) if(flag[0]==true) return false;
  29. bool exist=false;
  30. temp=x;
  31. while(temp) {
  32. if(flag[temp%10]==true) {
  33. exist=true;
  34. break;
  35. }
  36. temp/=10;
  37. }
  38. if(x/10*10==x) if(flag[0]==true) exist=true;
  39. if(exist) return false;
  40. temp=x;
  41. while(temp) {
  42. flag[temp%10]=true;
  43. temp/=10;
  44. }
  45. if(x/10*10==x) if(flag[0]==false) flag[0]=true;
  46. return true;
  47. }
  48. void renew(ll x) {
  49. if(x/10*10==x) flag[0]=false;
  50. while(x) {
  51. flag[x%10]=false;
  52. x/=10;
  53. }
  54. }
  55. bool checkall() {
  56. bool all=true;
  57. for(int i=0;i<=9;++i) {
  58. if(flag[i]==false) {
  59. all=false;
  60. break;
  61. }
  62. }
  63. return all;
  64. }
  65. void dfs(int index, int pos, int len) {
  66. if(checkall()) {
  67. sum++;
  68. for(int i=0;i<pos-1;++i) printf("%lld ",res[i]);
  69. printf("%lld\n",res[pos-1]);
  70. return;
  71. }
  72. if(index==len) return;
  73. for(int i=index;i<len;++i) {
  74. if(!check(ans[i])) continue;
  75. res[pos]=ans[i];
  76. dfs(i+1,pos+1,len);
  77. renew(ans[i]);
  78. }
  79. }
  80. int main() {
  81. for(ll i=0;i<=maxnum;++i) ans.push_back(i*i);
  82. int len=ans.size();
  83. memset(flag,false,sizeof(flag));
  84. dfs(0,0,len);
  85. printf("%d\n",sum);
  86. return 0;
  87. }

2016第七届 蓝桥杯 全国总决赛B题(完全平方数) (练习)的更多相关文章

  1. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

  2. 2016第七届蓝桥杯C/C++语言A组

    一:问题: 某君新认识一网友.当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提 ...

  3. 第七届蓝桥杯javaB组真题解析-分小组(第四题)

    题目 /* 分小组 9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I 下面的程序列出了所有的分组方法. 该程序的正常输出为: ABC DEF G ...

  4. 第七届蓝桥杯javaB组真题解析-凑算式(第三题)

    题目 /* 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. 比 ...

  5. 第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)

    题目 /* 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始 ...

  6. 第七届蓝桥杯javaB组真题解析-煤球数目(第一题)

    题目 /* 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有 ...

  7. java算法 第七届 蓝桥杯B组(题+答案) 10.压缩变换

    10.压缩变换  (程序设计) 小明最近在研究压缩算法.他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比.然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些 ...

  8. java算法 第七届 蓝桥杯B组(题+答案) 9.取球博弈

    9.取球博弈  (程序设计) 两个人玩取球的游戏.一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目.如果无法继续取球,则游戏结束.此时,持有奇数个球的一方获胜.如果两人都是 ...

  9. java算法 第七届 蓝桥杯B组(题+答案) 8.四平方和

    8.四平方和  (程序设计) 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.如果把0包括进去,就正好可以表示为4个数的平方和. 比如:5 = 0^2 + 0^2 + ...

随机推荐

  1. 编程&blog处女篇-用C#求100以内的质数

    using System;namespace Loops{ class Program { static void Main(string[] args) { /*局部变量定义*/ int i, j; ...

  2. 如何线上部署node.js项目

    来源:http://blog.csdn.net/chenlinIT/article/details/73343793 前言 最近工作不是很忙,在空闲时间学习用node+express搭建自己的个人博客 ...

  3. HDU 6121 Build a tree(找规律+模拟)

    Build a tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  4. 2017广东工业大学程序设计竞赛决赛-tmk买礼物

    tmk买礼物 Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店 ...

  5. THE MATRIX PROBLEM

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  6. AngularJS学习篇(二十四)

    AngularJS 应用 <html ng-app="myNoteApp"> <head> <meta charset="utf-8&quo ...

  7. JAVASE高级2

    反射概述 什么是反射? 反射的的概念是有smith1982年首次提出的,zhuy主要是指程序可以访问.检测和修改它本身状态或行为的一种能力. JAVA反射机制是运行状态中,对于任意一个类,都能够知道这 ...

  8. RE: Javascript分页处理

    背景: 调用PHP后端给的接口,以实现分页的功能.由于我是没造轮子的能力,所以翻了不少技术博客,经过整合才算完成整个分页功能.从一番查阅中,不难看出大概分为两种不同的分页: 一种是纯前端的,就是在一次 ...

  9. SSM :MyBatis与Spring的整合

    MyBatis与Spring的整合 一:Spring整合MyBatis的准备工作: (1.)在项目中加入Spring,ByBatis及整合相关的jar文件 (2.)建立开发目录结构,创建实体类 (3. ...

  10. SSM 五:Spring核心概念

    第五章:Spring核心概念 一.Spring Ioc 优点: 1.低侵入式设计 2.独立于各种应用服务器 3.依赖注入特性将组建关系透明化,降低耦合度 4.面向切面编程的特性允许将通用性任务集中式处 ...