计算1+2+3+4+……+n值大于等于500的最小n值

jpsignori 2006-10-12 12:50:54
计算1+2+3+4+……+n值大于等于500的最小n值,用java怎么实现,请大家帮忙!谢谢
...全文
1253 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
seething 2006-10-13
  • 打赏
  • 举报
回复
学习思想中...
sunday_hl 2006-10-13
  • 打赏
  • 举报
回复
Mark
学习中。
mienfly 2006-10-13
  • 打赏
  • 举报
回复
好东东,好些方法呀!学习!
tyc_2000_ren 2006-10-13
  • 打赏
  • 举报
回复
很好的思路 顶一下
ykzhujiang 2006-10-12
  • 打赏
  • 举报
回复
解不等式(1+n)*n/2>=500
xtaotao 2006-10-12
  • 打赏
  • 举报
回复
哈哈,有用吗

class test
{
static long sum(int n)
{
return (1+n)*n/2;
}

public static void main(String[] args)
{
int i=1;
long sum;

while(true)
{
sum = sum(i);
if(sum>=500) break;
i++;
}

System.out.println("Min N = "+i);
}
}
starhand 2006-10-12
  • 打赏
  • 举报
回复
顶你个肺
kadeya 2006-10-12
  • 打赏
  • 举报
回复
楼上正解,学习思想中...
iambic 2006-10-12
  • 打赏
  • 举报
回复
没有问题吧,我试过的,全部测试如下:


public class Sum500 {


public static int minN(int sum) {
return (int)Math.ceil(Math.sqrt(sum*2+0.25)-0.5);
}

public static void main(String args[]) {

System.out.println(minN(0));
System.out.println(minN(1));
System.out.println(minN(55));
System.out.println(minN(56));
System.out.println(minN(500));
System.out.println(minN(5049));
System.out.println(minN(5050));
System.out.println(minN(5051));


}
}

输出结果:

0
1
10
11
32
100
100
101

yahunetbar 2006-10-12
  • 打赏
  • 举报
回复
iambic

答案是有问题的 如果正好等于 答案是错误的
maquan 2006-10-12
  • 打赏
  • 举报
回复
很支持 ykzhujiang 和 iambic 的观点。

其实这种题目,如果出在数学课上,可能大家都没什么异议。而出现在计算机课上,就显得很模糊,因为题目本身没有说清楚哪些事情由计算机做、哪些事情应该让人脑先来完成。

在实际的应用环境里,要实现一个算法,首先要经过人脑的充分分析,最后把真正需要电脑来做的工作写成程序,而不能上来就让电脑傻算一通。除非是计算机课上练习循环语句的使用。
iambic 2006-10-12
  • 打赏
  • 举报
回复
哦,错了。循环计算的复杂度是O(n^0.5)。
iambic 2006-10-12
  • 打赏
  • 举报
回复
呵呵,可能有人觉得我用浮点数运算比较慢,其实我的算法时间复杂度是O(1),而循环计算的复杂度是O(logn)。另外我的算法其实只有一行:
(int)Math.ceil(Math.sqrt(sum*2+0.25)-0.5);
healer_kx 2006-10-12
  • 打赏
  • 举报
回复
晕,这种题目做出100道也不稀奇,哪里算得上牛啊。。。
vinegar111 2006-10-12
  • 打赏
  • 举报
回复
最苯的法子,自己加
int sum=0;
for(int i=1;sum<=500;i++){
sum+=i;
}
return i;
li_kewei 2006-10-12
  • 打赏
  • 举报
回复
public class TestCountN {
int n=0;
int i=0;
public int testN(){
for(i=0;;i++){
n+=i;
if(n>=500)
break;
}
return i;
}
public static void main(String[] args) {
TestCountN tcn=new TestCountN();
System.out.println(tcn.testN());
}

}
yyjzsl 2006-10-12
  • 打赏
  • 举报
回复
牛人,多啊,^_^!
buyaowen 2006-10-12
  • 打赏
  • 举报
回复
xtaotao的就可以吧?
感觉及不等式更费尽
haisenmai 2006-10-12
  • 打赏
  • 举报
回复
support upstairs
iambic 2006-10-12
  • 打赏
  • 举报
回复
这种题还要Java实现……
1+2+...+n >= 5000
n*(n+1) >= 1000
(n+0.5)^2 - 0.5^2 >= 1000
(n+0.5)^2 >= 1000.25
两边取平方根
n+0.5 >= 31.63
n >= 31.13
n >= 32
所以最小的是32

Java代码:

public class Sum500 {

public static int minN(int sum) {
return (int)Math.ceil(Math.sqrt(sum*2+0.25)-0.5);
}

public static void main(String args[]) {
System.out.println(minN(500));
}
}

加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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