| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 947 人关注过本帖
标题:出个题目,大家求解
只看楼主 加入收藏
a217zxg
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-10-20
收藏
 问题点数:0 回复次数:15 
出个题目,大家求解
把60481729这个QQ从中间分开,分成6048和1729两个数字。然后再相印6048+ 1729=7777,很不错的数字。还没完呢。继续。而7777×7777=60481729,晕!怎么又回来了?

谁能写一个程序,能这些数都找出来吗?
搜索更多相关主题的帖子: 求解 
2007-11-03 19:23
csmenglei951
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-30
收藏
得分:0 
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int a,b;
for( a=1000;a<10000;a++)
{
for( b=1000;b<10000;b++)
{
if(a+b==sqrt(a*10000+b))
cout<<a*10000+b<<endl;
}
}
return 0;
}
这个程序算法效率很低,惭愧..抛砖引玉
2007-11-03 19:56
a217zxg
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-10-20
收藏
得分:0 
  哈哈不错,我就知道这个有人会写的,循环次数多了,自然慢了一点,C++代码效率本来就不高的。
2007-11-03 20:33
zhoulikelvjj
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-4-10
收藏
得分:0 

这只是8位的。
#include<iostream>
#include<conio.h>

using namespace std;


int main()
{
int i,j,n;
long m;
for(i = 1001;i <= 9999;i++)
for(j = 1001;j <= 9999;j++){
n = i + j;
m = i * 10000 + j;
if( m == n*n)cout << m << endl;
}
cin.get();
return 0;
}

2007-11-03 20:34
zhoulikelvjj
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-4-10
收藏
得分:0 
我的要比2楼的快不少...不过只是算8位的.搂主应该说明数的范围,否则算法应该不一样了
2007-11-03 20:38
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用zhoulikelvjj在2007-11-3 20:38:21的发言:
我的要比2楼的快不少...不过只是算8位的.搂主应该说明数的范围,否则算法应该不一样了

没看出来你比2楼快在哪里!


Fight  to win  or  die...
2007-11-03 20:48
zhoulikelvjj
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-4-10
收藏
得分:0 
斑竹把程序运行下就能看出来了
2007-11-03 21:18
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
收藏
得分:0 
都是差不错  感觉不到

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-11-03 23:22
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 

/*
分析:
x+y=z
z*z=10000x+y
去掉参数z得 (x+y)^2=10000x+y
二元二次不定方程,其中1000<=x<10000,0<=y<10000,x,y属于Z
其解即是要求的

做如下变形
z=x+y
z^2=z+9999x
z^2-z=9999x
所以,有必要条件(z^2-z)(mod 9999)=0
即(z(z-1))(mod 9999)=0

算法设计,不妨枚举9999的倍数,再测试z(z-1)=x*9999是否有解,最后核查x,y的合法范围。
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int x,y,z;
for(x=1000;x<10000;x++){
z=(int)ceil(sqrt(9999.0*x));
if(z*(z-1)!=9999*x)continue;
y=z-x;
if(y>=10000 || y<0)continue;
printf("%.4d%.4d\n",x,y);
}
//system("pause");
}

2007-11-03 23:57
csmenglei951
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-30
收藏
得分:0 
9楼的算法的确很好...
ceil是返回一个大于或等于其参数的正整数..你怎么就确定Z就是你要找的那个值了?
2007-11-04 14:02
快速回复:出个题目,大家求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024970 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved