Algorithm 1到n个数字的最大和,其中和永远不应等于给定的整数k

Algorithm 1到n个数字的最大和,其中和永远不应等于给定的整数k,algorithm,Algorithm,如何找到从1到n的数字的最大和,但在任何时候,当前和都不应等于给定的数字k 这是我所做的,但并非总是正确的 static int maxMoney(int n, long k) { int currentSum = 0; for(int i = 1; i <= n; i++){ currentSum += i; if(currentSum == k){ currentSum -= 1; continue;

如何找到从1到n的数字的最大和,但在任何时候,当前和都不应等于给定的数字k

这是我所做的,但并非总是正确的

static int maxMoney(int n, long k) {
    int currentSum = 0;
   for(int i = 1; i <= n; i++){
       currentSum += i;
       if(currentSum == k){
           currentSum -= 1;
           continue;
       }
   }
  return currentSum;  
}
static int maxMoney(int n,long k){
int currentSum=0;

对于(int i=1;i首先假设您可以对所有数字求和:
sum=1+2+…+n
,可以计算为
sum=n(n+1)/2

然后检查在1和n之间是否有i,例如
1+2+…+i=k
。如果没有,则先前计算的和就是解

如果存在这样的i,则拒绝1,并返回
sum-1

通过求解以下方程式确定是否存在此类i:

k = i(i+1)/2
这个二次方程有一个正解:

i = (sqrt(1+8k) - 1) / 2
如果这个i是一个整数,并且在区间1…n内,那么我们确实找到了这样一个i。否则,我们可以得出结论,对于区间1…n内的任何i,k永远不会等于1+2+…+i

下面是一个小JavaScript函数,它实现了以下功能:

函数getSum(n,k){ var和,i; 总和=n*(n+1)/2; i=(数学sqrt(1+8*k)-1)/2;
如果(i==Math.floor(i)&&i首先假设你可以对所有数字求和:
sum=1+2+…+n
,可以计算为
sum=n(n+1)/2

然后检查在1和n之间是否有i,例如
1+2+…+i=k
。如果没有,则先前计算的和就是解

如果存在这样的i,则拒绝1,并返回
sum-1

通过求解以下方程式确定是否存在此类i:

k = i(i+1)/2
这个二次方程有一个正解:

i = (sqrt(1+8k) - 1) / 2
如果这个i是一个整数,并且在区间1…n内,那么我们确实找到了这样一个i。否则,我们可以得出结论,对于区间1…n内的任何i,k永远不会等于1+2+…+i

下面是一个小JavaScript函数,它实现了以下功能:

函数getSum(n,k){ var和,i; 总和=n*(n+1)/2; i=(数学sqrt(1+8*k)-1)/2;
如果(i==Math.floor(i)&&i你试过什么?你用什么语言?你必须按顺序把数字相加吗?你必须一个接一个地把它们相加吗?或者你能用数学属性来简化一些计算,比如
1+2+…+n=n(n+1)/2
提示:如果总和永远不等于k,答案显然是n*(n-1)/2.让我们假设它在某一点上等于k。如果我们扔掉1会怎么样?@JohnDoe你只需要解一个二次方程来检查它是否曾经等于
k
。你尝试过什么?你使用什么语言?你必须按顺序添加数字吗?你必须一个接一个地添加它们吗,或者你能使用数学工具吗简化某些计算的属性,如
1+2+…+n=n(n+1)/2
提示:如果总和永远不等于k,答案显然是n*(n-1)/2。让我们假设它在某个点等于k。如果我们扔掉1会怎么样?@JohnDoe你只需要解一个二次方程来检查它是否曾经等于
k