一、题目解析
要找出的数显然需要满足三个条件:
1.数的范围是从1-99999.的整数。
2.数满足是完全平方数。
3.数中有两位数字相同。
二、编程思路:简化条件的限制,直接对一个数的平方做循环,并让平方数满足该范围。判断两位数字相同可以采用排序算法加去重来实现。具体实现代码如下:
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
bool function(int n)
{
vector<int> vec;
int ntenthousand = n / 10000;
int nthousand = n % 10000 / 1000;
int nhun = n % 1000 / 100;
int nten = n % 100 / 10;
int nge = n % 10;
if (ntenthousand!=0)
{
vec.push_back(ntenthousand);
vec.push_back(nthousand);
vec.push_back(nhun);
vec.push_back(nten);
vec.push_back(nge);
}
else{
if (nthousand!=0)
{
vec.push_back(nthousand);
vec.push_back(nhun);
vec.push_back(nten);
vec.push_back(nge);
}
else
{
if (nhun!=0)
{
vec.push_back(nhun);
vec.push_back(nten);
vec.push_back(nge);
}
else
{
if (nten!=0)
{
vec.push_back(nten);
vec.push_back(nge);
}
else
{
return false;
}
}
}
}
sort(vec.begin(),vec.end());
int oldsize = vec.size();
vec.erase(unique(vec.begin(),vec.end()), vec.end());
int newsize = vec.size();
if(oldsize != newsize)
return true;
else
return false;
}
int main()
{
int n,j=0;
for (int i = 0; i*i < 100000; ++i)
{
n = i*i;
if (function(n))
{
cout << n << " ";
++j;
if (j%10==0)
{
cout << endl;
}
}
}
cout << endl;
return 0;
}
样例输出:100 3969 11025 19600 31329 4752460516 76729 99225
121 4225 11236 19881 32400 48400 61009 77284 99856
144 4489 11449 20449 33124 4884162001 77841
225 4624 11664 21025 3348949284 62500 78400
400 4900 11881 21316 3385649729 63001 80089
441 5625 12100 ...