一、題目解析
要找出的數顯然需要滿足三個條件:
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 ...