Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何使用for循环返回最小值?_String_For Loop_Limit - Fatal编程技术网

String 如何使用for循环返回最小值?

String 如何使用for循环返回最小值?,string,for-loop,limit,String,For Loop,Limit,给了我一个限制,我必须返回n的最小值才能使它成为真:1+2+3+4+…+n>=limit。我觉得少了一样东西,但我说不出来 public int whenToReachLimit(int limit) { int sum = 0; for (int i = 1; sum < limit; i++) { sum = sum + i; } return sum; } public int何时达到限制(int limit){ 整数和=0; 对于(int i=1;总和3//wh

给了我一个限制,我必须返回n的最小值才能使它成为真:1+2+3+4+…+n>=limit。我觉得少了一样东西,但我说不出来

public int whenToReachLimit(int limit) {
 int sum = 0;

 for (int i = 1; sum < limit; i++) {
   sum = sum + i;
  }
 return sum;
}
public int何时达到限制(int limit){
整数和=0;
对于(int i=1;总和<极限;i++){
sum=sum+i;
}
回报金额;
}
输出为:
1:1
4:3

10:4

我不确定我是否确切知道你想做什么。但我建议进行一次“练习跑”


现在,您可以自己决定函数是否满足您的期望。

如果您不想返回sum,您想返回n(满足给定要求的最小可能值)


返回
i-1
而不是
sum

您可以使用以下方法避免循环来计算n个第一个整数的和:

因此,不平等变成:

请注意,左侧为正(如果n为负,则总和为空)并严格递增。还要注意,您正在寻找满足不等式的第一个整数。这里的想法是首先用一个等式来代替不等式,这样我们就可以求解n的方程。在第二步中,可能的非整数解将更接近最接近的整数

解这个n的方程会得到两个解。负的可以丢弃(记住n是正的)。即:

最后,让我们将此解决方案四舍五入到最接近的整数,该整数也将满足不等式:


注意:对于小的输入,它可能会被过度使用

我找到了答案。结果证明它不适用于我觉得奇怪的
for
循环。但这是我自己问题的答案

public int whenToReachLimit(int limit) {
int n = 0;
int sum = 0;

while (sum < limit) {
   sum += n;
   n++;
  }
 return n-1;
}
public int何时达到限制(int limit){
int n=0;
整数和=0;
while(总和<限制){
总和+=n;
n++;
}
返回n-1;
}

我忘了添加,输出将是:whenToReachLimit(1)->1//whenToReachLimit(4)->3//whenToReachLimit(10)->4我只能得到1的输出,但不能得到4和10的输出。对不起,我目前还不清楚,函数应该做什么。请给出一些你想要的输入的例子。但是当我有
int sum=0
时,我不能返回
I-1
sum
for
循环之后,什么时候
sum
将保持为0?仅当
limit
为0时。如果
limit
为0,您将返回(i-1)=1-1=0,这是正确的。我不知道您是否阅读了最后一个人的评论,但输出应该是whenToReachLimit(1)->1//whenToReachLimit(4)->3//whenToReachLimit(10)->4@DissolvedMan,现在查看我编辑的答案。它将返回4表示限制10,返回5表示限制11。这就是您想要的吗?如果它与
while
一起工作,那么它可以与
for
循环一起工作。再次查看我的答案。Aka
return(int)Math.ceil((-1+Math.sqrt(1+8*limit))/2)
public int whenToReachLimit(int limit) {
int n = 0;
int sum = 0;

while (sum < limit) {
   sum += n;
   n++;
  }
 return n-1;
}