前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【蓝桥杯】2013-A组02 排它平方数

【蓝桥杯】2013-A组02 排它平方数

作者头像
喜欢ctrl的cxk
发布2020-02-13 10:17:52
4841
发布2020-02-13 10:17:52
举报
文章被收录于专栏:Don的成长史

题目描述:

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

解题思路:

首先无脑枚举找出每个数位上数字不同的6位正整数,然后用bool型函数check来检查数字y中是否每个数位出现的数字在x中都不曾出现过,这一步可以用自定义函数ll2s来把long long型的数字转换成string型再用find进行查找,最后输出即可。

AC代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
#define Up(i,a,b) for(int i = a;i <= b; i++)
typedef long long ll;

void ll2s(ll x,string &str)  //把long long转换成string
{
    stringstream ss;
    ss << x;
    ss >> str;
}

bool check(ll x,ll y)  //检查y中是否含有x中的数字
{
    string strx,stry;
    ll2s(x,strx);
    ll2s(y,stry);
    Up(i,0,strx.length()-1)
    {
        if(stry.find(strx[i]) != string::npos)
        {
            return false;
        }
    }
    return true;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    Up(i,1,9)    
    {
        Up(j,0,9)
        {
            if(i!=j)
            {
                Up(k,0,9)
                {
                    if(k!=i && k!=j)
                    {
                        Up(l,0,9)
                        {
                            if(l!=i && l!=j && l!=k)
                            {
                                Up(m,0,9)
                                {
                                    if(m!=i && m!=j && m!=k && m!=l)
                                    {
                                        Up(n,0,9)
                                        {
                                            if(n!=i && n!=j && n!=k && n!=l && n!=m)
                                            {
                                                ll x = i*1e5+j*1e4+k*1e3+l*1e2+m*10+n;
                                                ll y = x*x;
                                                if(check(x,y) && x!=203879) cout << x << endl;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 解题思路:
  • AC代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档