排他平方数

Posted Kira~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排他平方数相关的知识,希望对你有一定的参考价值。

排他平方数

1.6位正整数
2.每个数位上数字不同
3.其平方的每个数位不含原数字组成的任何数位

#include <iostream>
#include <sstream>
using namespace std;

sstream 头文件必不可少,下的str函数中是stringstream要用到这个头文件。

void str(long long x,string &xx)

    stringstream ss;
    ss<<x;
    ss>>xx;

上面的这个函数的作用是将数值型转换成字符型,用了stringstream的方法实现
注意:xx的返回值类型必须为引用类型,否则会造成结果的错误

bool check(long long x,long long xx)

    string x1,xx1;
    str(x,x1);
    str(xx,xx1);
    for(int i=0;i<x1.length();i++)
    
        if(xx1.find(x1[i])!=string::npos)
        
            return false;
        
    
    return true;

用穷举的方法将所有六位数都一一列举并验证是否符合条件,注意列举时应当排除有相同数位的数字。

int main()

   int a1,a2,a3,a4,a5,a6;
   for(a1=1;a1<=9;a1++)
   
       for(a2=0;a2<=9;a2++)
       
           if(a2!=a1)
           for(a3=0;a3<=9;a3++)
           
               if(a3!=a2&&a3!=a1)
               for(a4=0;a4<=9;a4++)
               
                   if(a4!=a3&&a4!=a2&&a4!=a1)
                   for(a5=0;a5<=9;a5++)
                   
                       if(a5!=a4&&a5!=a3&&a5!=a2&&a5!=a1)
                       for(a6=0;a6<=9;a6++)
                       
                           if(a6!=a5&&a6!=a4&&a6!=a3&&a6!=a2&&a6!=a1)
                           
                               long long      x=a1*100000+a2*10000+a3*1000+a4*100+a5*10+a6;
                               long long xx=x*x;
                               if(check(x,xx))
                               
                                   cout<<x<<endl;
                               
                           
                       
                   
               
           
       
   

最后只输出了两个6位数 203879639172 ,说明只有两个结果符合要求

以上是关于排他平方数的主要内容,如果未能解决你的问题,请参考以下文章

排它平方数

HDU 4507 求指定范围内与7不沾边的所有数的平方和 (数位DP)

背包DP(数位成本和为目标值的最大数字+完全平方数+零钱兑换+盈利计划+最后一块石头的重量+目标和+1和0)

51Nod1230 幸运数

51nod 1230:幸运数

关于快乐数的算法