该数小于99999,是某一个整数的平方,且至少存在两个相同的数,如:121,144等

wanphonguo 2007-03-19 10:14:40
该数小于99999,是某一个整数的平方,且至少存在两个相同的数,如:121,144等
编程实现.
...全文
285 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ouyh12345 2007-03-19
  • 打赏
  • 举报
回复
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;
}
ToIP 2007-03-19
  • 打赏
  • 举报
回复
#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


69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧