| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4700 人关注过本帖
标题:已知n/2是完全平方数,n/3是立方数,编写一个程序求最小的正整数n.
只看楼主 加入收藏
williamlyf
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-8-30
收藏
 问题点数:0 回复次数:21 
已知n/2是完全平方数,n/3是立方数,编写一个程序求最小的正整数n.
已知n/2是完全平方数,n/3是立方数,编写一个程序求最小的正整数n。
搜索更多相关主题的帖子: 立方 整数 平方 编写 
2007-08-30 19:55
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
心算都可以了,只有一个数648



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-08-30 21:01
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
收藏
得分:0 
LS,太拽了。。真的是心算的?

鸟蛋开始孵化。。。我等待那一天Forever。。
2007-08-30 23:00
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
哦~~~~不对,是648 * a^6,其中a是任意一个与2和3都互质的正整数(1,5,7,11,25等等)
这就是所有的解了


by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]

[此贴子已经被作者于2007-8-30 23:11:33编辑过]

2007-08-30 23:09
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
心算的方法是6的三次方再乘以3就是答案



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-08-30 23:13
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 
回复:(williamlyf)已知n/2是完全平方数,n/3是立方数...

/*---------------------------------------------------------------------------
File name: 648.c
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 8/30/2007 08:12:36
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762


Modification history:
===========================================================================


Problem statement:
---------------------------------------------------------------------------
http://bbs.bc-cn.net/viewthread.php?tid=166576
已知n/2是完全平方数,n/3是立方数,编写一个程序求最小的正整数n。


Analysis:
---------------------------------------------------------------------------
n/2=a*a
n/2=b*b*b

implies 2*a*a = 3*b*b*b.


雨中飞燕:
心算都可以了,只有一个数648


When it is said "最小的正整数n", it is certain we have at most one solution.


Sample output:
---------------------------------------------------------------------------
n=648
Press any key to continue . . .


*/

#include <stdio.h>
#include <math.h>

int main()
{
int a, b, c;

/**
for this kind of problem, you can apply binary search:
since
1, 4, 9, 16, 25, ...
1, 8, 27, 64, 125, ...
are ordered.

Following code does not use binary search, instead it is a
burte force search.
*/

for(b=1; b<100000; ++b)
{
c=(int)sqrt(1.5*b*b*b);
for(a=1; a<=c; ++a)
{
if(2*a*a==3*b*b*b)
{
printf("n=%d\n", 2*a*a);
return 0;
}
}
}

return 0;
}

[此贴子已经被作者于2007-8-30 23:16:24编辑过]


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-08-30 23:14
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
收藏
得分:0 

楼上,利害!!
我也写了一个,效率太低,,呵呵

//这个数必然是6的倍数
#include <iostream>
#include <cmath>
using namespace std ;

bool IsThree(const int n)
{
int i ;
bool res = false ;
for(i=2; i<n/3; i+=2)
{
if(i*i*i == n)
{
res = true ;
return res ;
}
}

return res ;
}

bool IsTwo(const int n)
{
int i ;
bool res = false ;

if(sqrt(n) == (int)sqrt(n))
{
res = true ;
}

return res ;
}

void GetNum(int &num)
{
while(!(IsTwo(num/2) && IsThree(num/3)))
{
num += 6;
}
}

int main()
{
int m_num = 6 ;

GetNum(m_num) ;

cout << m_num << endl ;

return 0 ;
}

[此贴子已经被作者于2007-8-31 0:06:39编辑过]


鸟蛋开始孵化。。。我等待那一天Forever。。
2007-08-30 23:45
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
数学的力量是很强大的~~~~~~~~~~~~~~~



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-08-31 00:19
醉生梦死
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-8-21
收藏
得分:0 
回复:(HJin)回复:(williamlyf)已知n/2是完全平方...

呵呵!做了点小改动
好像效率能高点
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
for (int i=1;i<100000;i++)
{
int c=int(sqrt(1.5*i*i*i));
if(2*c*c==3*i*i*i)
{
cout<<2*c*c<<endl;
break;
}
}

return 0;
}


2007-08-31 01:10
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
收藏
得分:0 
c=(int)sqrt(1.5*b*b*b);
这句话的作用是什么呢??为什么要这样写??

鸟蛋开始孵化。。。我等待那一天Forever。。
2007-08-31 09:57
快速回复:已知n/2是完全平方数,n/3是立方数,编写一个程序求最小的正整数n.
数据加载中...
 
   



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

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