排他平方数
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位数 203879 和 639172 ,说明只有两个结果符合要求
以上是关于排他平方数的主要内容,如果未能解决你的问题,请参考以下文章
HDU 4507 求指定范围内与7不沾边的所有数的平方和 (数位DP)