蓝桥杯-2013省赛-排他平方数

编程入门 行业动态 更新时间:2024-10-21 06:02:54

<a href=https://www.elefans.com/category/jswz/34/1769450.html style=蓝桥杯-2013省赛-排他平方数"/>

蓝桥杯-2013省赛-排他平方数

蓝桥杯-2013省赛-排他平方数

题目描述

小明正看着 203879 这个数字发呆。原来,203879 * 203879 = 41566646641这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。具有这样特点的6位数还有一个,请你找出它!再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位

答案是一个6位的正整数。

请通过浏览器提交答案。
注意:只提交另一6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。

思路解析

知识点:

  1. int整型的范围:2147483647 ~ -2147473648

将数字各个数位分别存储到vector中,通过for循环一次判断每个六位整数是否各个数位相异,及自身的乘积是否含有自身的组成数字即可。

代码如下:

#include<iostream>
#include<vector>
#include "time.h"
using namespace std;// 判断给定数位上的数字num是否包含于con
bool contain(vector<int> con, int num) {for (int i = 0; i < con.size(); i++) {if (con[i] == num) {return true;}}return false;
}// 判断指定数字的每一个数位是否含有原数字的组成数字
bool is_in(long long int res, vector<int> con) {while (res) {int num = res % 10;res /= 10;if (contain(con, num))return true;}return false;
}// 将原数字转换为容器,并用flag代表他是否为各个数位均相异
vector<int> get_vector(long long int num, int &flag) {vector<int> res;while (num) {if (contain(res, num % 10)) {num /= 10;flag = 0;return res;}res.push_back(num % 10);num /= 10;}return res;
}int main() {for (long long int i = 100000; i < 1000000; i++) {if (i == 203879)continue;int flag = 1; // 代表数字是否为各个数位均相异,1表示均相异vector<int> con = get_vector(i, flag);if (!flag)continue;long long int res = i * i;if (!is_in(res, con)) {printf("%d\n", i);return 0;}}
}

答案为:639172

还是不够严谨,有些细节没有充分考虑,调试半天才看出来,需要多加练习**

更多推荐

蓝桥杯-2013省赛-排他平方数

本文发布于:2023-07-28 15:44:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1239230.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:蓝桥杯   省赛

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!