三位数,要求为完全平方数,且有两位数字相同

langqimaohua 2007-06-08 06:34:13
RT,用C++编,怎么弄啊,可以帮帮我吗,谢谢了
...全文
871 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶落无心 2007-06-09
  • 打赏
  • 举报
回复
修改建议:
#include <math.h>
直接在循环中限制范围,则能减少判断次数,很多次哦
int main()
{
int i, j;
char ss[4];
int upper = sqrt(1000 );
for (i=10; i<upper ; ++i)
{
j = i*i;
sprintf(ss, "%d", j);
if (ss[0] == ss[1] || ss[1] == ss[2] || ss[0]==ss[2] )
printf("%d\n", j);

}

return 0;
}
Vitin 2007-06-09
  • 打赏
  • 举报
回复
赞同LS的方法。

不过,说到效率,它可能会比较慢的。
int upper = sqrt(1000 );
求平方根的话,如果没有优化过,会有许多次计算,会比减少的判断次数(<upper)更多。

当然,它是一个好办法,勿容置疑。
expter 2007-06-08
  • 打赏
  • 举报
回复
Vitin 2007-06-08
  • 打赏
  • 举报
回复
同意coldwindtang(风)。

此外还有两点可以优化一些,for循环里可以改为:
j = i*i;
if (j<=999) // i 从10 开始
{
sprintf(ss, "%d", j);
if (ss[0] == ss[1] || ss[1] == ss[2] || ss[0]==ss[2] )
printf("%d\n", j);
}
else
{
break; // i 是递增的
}
特别是后一点,在数字比较大的时候,优化是明显的。
langqimaohua 2007-06-08
  • 打赏
  • 举报
回复
谢谢啦
langqimaohua 2007-06-08
  • 打赏
  • 举报
回复
你好强
唐巧 2007-06-08
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
int i, j;
char ss[4];
for (i=10; i<100; ++i)
{
j = i*i;
if (j>=100 && j<=999)
{
sprintf(ss, "%d", j);
if (ss[0] == ss[1] || ss[1] == ss[2] || ss[0]==ss[2] )
printf("%d\n", j);
}
}

return 0;
}
/*

输出结果:
100
121
144
225
400
441
484
676
900

*/
langqimaohua 2007-06-08
  • 打赏
  • 举报
回复
能把源代码告告我吗,十分感谢
星羽 2007-06-08
  • 打赏
  • 举报
回复
穷举 - -!

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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