题目描述

把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。

输入

输出

按从小到大的顺序输出这三个三位数,由空格隔开。输出占一行。

源代码

//本题即为枚举类型,我使用的是dfs来解决,但是最初WA了一发
//是因为没读清题,本题的意思是用1-9这9位数来构造3个3位数
//且这三个三位数都是完全平方数,没有重复的数字,每个数字只能用一次
//还要按照从小到大的方式输出这三位数
#include <iostream>
#include <cmath>
using namespace std;
const int N = 1000000 + 10;
//path数组存九位,每三位一位
int path[N];
//布尔数组保证每个数只能用一次
bool vis[N];
//flag标志保证仅仅输出一个解
int flag = 0;
//对于判断完全平方数我采用数学库的方法来判断
//完全平方数的概念即为某个数的根是整数
//我们用数学库sqrt求得的正整数的根会向下取整
//因此若根是一个小数则必为错误根,其平方也不等于n
bool judge(int n)
{int root = sqrt(n);if(root * root == n)return true;else return false;
}
//然后使用深度优先搜索来枚举这九个数
void dfs(int u)
{if(u == 9){//依次为第一二三个三位数 int ans1 = path[0] * 100 + path[1] * 10 + path[2];int ans2 = path[3] * 100 + path[4] * 10 + path[5];int ans3 = path[6] * 100 + path[7] * 10 + path[8];//若三者都为完全平方数且flag为0 if(judge(ans1) && judge(ans2) && judge(ans3) && flag == 0){flag = 1;//置flag为1,后续解不在输出 cout << ans1 << ' ' << ans2 << ' ' << ans3 << ' ';}return;//回溯 }for(int i = 1;i <= 9;i ++ ){if(!vis[i]){path[u] = i;vis[i] = true;dfs(u + 1);vis[i] = false;}}
}
int main()
{//我们枚举采用的是最靠前,最低为优先,因此能够保证答案是升序 dfs(0);return 0;
}

ZZULIOJ:1148: 组合三位数之一相关推荐

  1. ZZULIOJ 1148: 组合三位数之一

    题目描述 把1.2.3.4.5.6.7.8.9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数.按从小到大的顺序输出这三个三位数. 输入 无 输出 按从小到大的顺序输出这三个三位数 ...

  2. 1148: 组合三位数之一 C语言

    1148: 组合三位数之一 时间限制: 1 Sec 内存限制: 128 MB 提交: 4056 解决: 2880 [状态] [讨论版] [提交] [命题人:admin] 题目描述 把1.2.3.4.5 ...

  3. 详细代码注释1148: 组合三位数之一

    题目描述 48: 组合三位数之一 时间限制: 1 Sec 内存限制: 128 MB 提交: 5197 解决: 3705 把1.2.3.4.5.6.7.8.9组合成3个3位数,要求每个数字仅使用一次,使 ...

  4. ZZULIOJ 1149: 组合三位数之二

    题目描述 把1,2,3,4,5,6,7,8,9,组成三个三位数(每个数只能用一次),第二个数是第一个数的2倍,第三个数是第一个数的3倍,这三个三位数各是多少?答案可能有很多组,请按第一个数的升序顺序输 ...

  5. zzulioj1148: 组合三位数之一

    1148: 组合三位数之一 题目描述 把1.2.3.4.5.6.7.8.9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数.按从小到大的顺序输出这三个三位数. 输入 无 输出 按从 ...

  6. C语言数组练习-组合三位数

    要求:将0到9这十个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的1/2,是第三个3位数的1/3.问应当怎样分,编写程序实现. #声明:本代码思路较为简单,但书写复杂请酌情参考. ---- ...

  7. 组合三位数c语言第八周,C语言教案-第八周教学提纲.doc

    第八节 数组 --一维数组 1:通过对本节课的学习,能够了解.掌握有关数组的相关概念及一维数组定义.初始化.引用和在程序中使用. 1.1教学目的: 1. 数组的相关概念 2. 一维数组的定义.初始化. ...

  8. 7-88 组合成最小的三位数

    7-88 组合成最小的三位数 输入一个三位数的正整数,将数字位置重新排列,组成一个尽可小的三位数. 输入格式: 输入一个三位的正整数. 输出格式: 输出组合之后最小的三位值正整数. 输入样例: 315 ...

  9. python数字组合算法_python - 简单算法题 - 求三位数组合

    求三位数组合 lst = [3, 6, 2, 7] 这四个数字能组成多少个互不相同且无重复数字的三位数?比如362算一个,326算一个,请逐个输出他们 思路分析 从4个数里面取3个数,且不重复,然后进 ...

  10. Python如何实现将四位数字组合成一个不重复的三位数,for循环暴力解法

    Python如何实现将四位数字组合成一个不重复的三位数,for循环暴力解法 周末的时候遇到一个题目,看似很简单,但是在当时考试的情况下来说,我误判了,我没有把握好时间,导致我后面时间很紧,没有时间去思 ...

最新文章

  1. Delphi - 数组 详解
  2. VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
  3. 非侵入式监控php,非侵入式监控PHP应用性能监控分析
  4. Android数据存储之SD卡
  5. 归并排序的实现及其优化(递归法)
  6. mysql分页查询语法
  7. bootstrap-动画过渡
  8. VGG-16 prototxt
  9. 数据结构与算法 / 字符串匹配算法汇总
  10. 使用Storm实现实时大数据分析!
  11. C# WinForm 中Label自动换行 解决方法
  12. TZOJ 4813 机器翻译(模拟数组头和尾)
  13. SFS2X客户端全部事件详细
  14. linux配置erp访问端口_nginx配置相同端口号访问多个项目
  15. SAX方式解析XML文档
  16. hyper-V管理器构建win7虚拟机
  17. 章文嵩评价左耳朵耗子(2016年发布于内网)
  18. 不错的javascript极品日历
  19. 迅雷离线下载与高速通道运作原理详解
  20. 电脑使用小常识(4):让win10强制更新棍淡

热门文章

  1. 关于单片机程序设计的几点
  2. 【python学习笔记】初见
  3. 【Linux】Linux操作系统简单介绍 ----vim编辑器
  4. 计算机相关期刊,计算机相关杂志
  5. 并查集-A Bug's Life(poj2492)
  6. 一刹那,是幡然悔悟的一刹那
  7. 微信小程序快递物流信息跟踪查询api接口对接快递鸟案例
  8. Python中print函数细节——默认换行
  9. 世界金融发展史:从资产证券化到STO
  10. 图形驱动程序和显卡驱动什么区别_更新电脑显卡驱动有什么作用 更新电脑显卡驱动操作介绍【详解】...