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;
}
/* 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;
}