该数小于99999,是某一个整数的平方,且至少存在两个相同的数,如:121,144等
该数小于99999,是某一个整数的平方,且至少存在两个相同的数,如:121,144等
编程实现.
[解决办法]
BOOL IsValid(char *str, int nLen)
{
for (int i = 0; i < nLen - 1; i++)
{
for (int j = i + 1; j < nLen; j++)
{
if (str[i] == str[j])
{
return TRUE;
}
}
}
return FALSE;
}
int main(int argc, char *argv[])
{
typedef vector <int> vInt;
vInt m_int;
int m = 0;
char str[6];
for(int i = 4; i < 1000; i++)
{
m = i * i;
memset(str, 0, sizeof(str));
sprintf(str, "%d ", m);
if (IsValid(str, strlen(str))
{
m_int.push_back(m);
}
}
printf( "The number is: %d\n ", m_int.size());
for (vInt::iterator it = m_int.begin(); it != m_int.end(); ++it)
{
printf( "%d\n ", (*it));
}
return 0;
}
[解决办法]
#include <stdio.h>
/* define the minimal times of the duplicated number*/
#define MIN_DUPLICATED_TIMES 2
inline static int check_dup_times(long in_num, int min_dup)
{
int mask[10] = { 0 };
do {
int i = in_num % 10;
if (mask[i] > = min_dup -1) return 1;
++mask[i];
} while (in_num /= 10);
return 0;
}
int main(int argc, char *argv[])
{
long i;
for (i=1; i*i <99999; ++i) {
if (check_dup_times(i*i, MIN_DUPLICATED_TIMES)) printf( "%d\t ", i*i);
}
return 0;
}
定义MIN_DUPLICATED_TIMES这个宏可以更改重复数字的个数。
当设为3时得到如下结果:
1444 10000 11881 14161 17161 22201 27225 28224 29929 40000 44944 46656 55225 66564 69696 88804 90000 97969
当设为4时得到如下结果:
10000 40000 44944 90000